Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   при нажатии кнопки на клавиатуре передвигается объект (http://www.flasher.ru/forum/showthread.php?t=135731)

veles2008 30.01.2010 21:00

при нажатии кнопки на клавиатуре передвигается объект
 
Приветствую!

У меня следующая проблема.
На сцене есть объект. При нажатии кнопки "ф" на клавиатуре он передвигается.
Должно быть так: при первом нажатии он должен передвинуться на 20, при втором на 25. А в моём коде он почему то передвигается сразу на 45. Как это можно исправить?
Код AS1/AS2:

var fff:Number;
var can1:Boolean=true;
 
onEnterFrame = function(){
if (can1) {
if (fff == 1) {
kursor._x +=20;
can1=false;
can2=true;
} else {
        kursor._x +=0;
}
}
if (can2) {
if (fff == 1) {
kursor._x +=25;
can2=false;
} else {
        kursor._x +=0;
}
}
 
}
 
key65.onKeyDown = function() {
        if (Key.getCode() == 65) {
    fff=1;
                  }
        };
key65.onKeyUp = function() {
        if (Key.getCode() == 65) {
                fff=0;
        }
                };
Key.addListener(key65);


samana 30.01.2010 22:49

Попробуй так
Код AS1/AS2:

step = 20;
Key.addListener(clip);
clip.onKeyDown = function() {
        if (Key.isDown(65)) {
                clip._x += step;
        }
 
};
clip.onKeyUp = function() {
        if (step == 20) {
                step = 45;
        } else {
                step = 20;
        }
 
};


veles2008 30.01.2010 23:59

samana, так мне не подходит, мне не нужно перемещаться на 45 сразу.
Мне нужно конкретно по моему коду, потому что в дальнейшем клавиши будут добавляться и при нажатии предыдущих будет защитываться ошибка, а при нажатии следующих бал.

Объясню проще.
Есть ряд букв по которым должен пройти курсор. И нужно нажимать на ту кнопку клавиатуры перед какой стоит курсор. У меня всё получается кроме одного - если одинаковые буквы рядом то курсор сразу перепрыгивает на последнюю. Вот это и нужно исправить.

udaaff 31.01.2010 00:39

Цитата:

Сообщение от veles2008 (Сообщение 883064)
Объясню проще.
Есть ряд букв по которым должен пройти курсор. И нужно нажимать на ту кнопку клавиатуры перед какой стоит курсор. У меня всё получается кроме одного - если одинаковые буквы рядом то курсор сразу перепрыгивает на последнюю. Вот это и нужно исправить.

Вы странным образом пытаетесь эту задачу решить.
Ряд букв – это строка. У каждого символа в строке есть индекс. Пользователь вводит символ, вы проверяете совпал ли он с текущим символом, определяемый каким-нибудь счетчиком. Если да, то переводите курсор на следующий. Счетчик увеличиваете на единицу.

samana 31.01.2010 00:41

Ой ё, число 45 я случайно вместо 25 вставил, забыл исправить после тестирования. Но это уже не важно.

veles2008 31.01.2010 11:07

Цитата:

Сообщение от udaaff (Сообщение 883072)
Вы странным образом пытаетесь эту задачу решить.
Ряд букв – это строка. У каждого символа в строке есть индекс. Пользователь вводит символ, вы проверяете совпал ли он с текущим символом, определяемый каким-нибудь счетчиком. Если да, то переводите курсор на следующий. Счетчик увеличиваете на единицу.

Если я правильно понял то каждую букву нужно преобразовывать в символ. А если букв 50 и больше, то будет возрастать объём файла, а мне нужно экономить объём.

А если вы имели в виду другое, то можно увидеть пример?

udaaff 31.01.2010 15:10

Цитата:

Сообщение от veles2008 (Сообщение 883115)
Если я правильно понял то каждую букву нужно преобразовывать в символ. А если букв 50 и больше, то будет возрастать объём файла, а мне нужно экономить объём.

А если вы имели в виду другое, то можно увидеть пример?

Код AS1/AS2:

var str:String = "asdf";
var c:Number = 0;
 
Key.addListener(this);
 
function onKeyDown():Void
{
        if (Key.getAscii() == str.charCodeAt(c))
        {
                if (c++ < str.length)
                {
                        // переводим курсор на следующий символ.
                }
                else
                {
                        // the end.
                }
        }
}


veles2008 31.01.2010 18:38

udaaff, Огромное спасибо!!!

udaaff 31.01.2010 18:59

Раз вас такой вариант устроил, то на заметку: метод Key.getAscii() возвращает только английские аски в независимости от раскладки. Для того, чтобы узнать соответствующий русский символ, необходимо будет в зависимости от того, нажат ли капслок, шифт, и кода клавиши, вычислять символ через соответствующие массивы, содержащие русские символы на позициях (индексах) равных соответствующим кодам клавиш.


Часовой пояс GMT +4, время: 14:42.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.