Просмотр полной версии : при нажатии кнопки на клавиатуре передвигается объект
veles2008
30.01.2010, 21:00
Приветствую!
У меня следующая проблема.
На сцене есть объект. При нажатии кнопки "ф" на клавиатуре он передвигается.
Должно быть так: при первом нажатии он должен передвинуться на 20, при втором на 25. А в моём коде он почему то передвигается сразу на 45. Как это можно исправить?
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);
Попробуй так
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 сразу.
Мне нужно конкретно по моему коду, потому что в дальнейшем клавиши будут добавляться и при нажатии предыдущих будет защитываться ошибка, а при нажатии следующих бал.
Объясню проще.
Есть ряд букв по которым должен пройти курсор. И нужно нажимать на ту кнопку клавиатуры перед какой стоит курсор. У меня всё получается кроме одного - если одинаковые буквы рядом то курсор сразу перепрыгивает на последнюю. Вот это и нужно исправить.
Объясню проще.
Есть ряд букв по которым должен пройти курсор. И нужно нажимать на ту кнопку клавиатуры перед какой стоит курсор. У меня всё получается кроме одного - если одинаковые буквы рядом то курсор сразу перепрыгивает на последнюю. Вот это и нужно исправить.
Вы странным образом пытаетесь эту задачу решить.
Ряд букв – это строка. У каждого символа в строке есть индекс. Пользователь вводит символ, вы проверяете совпал ли он с текущим символом, определяемый каким-нибудь счетчиком. Если да, то переводите курсор на следующий. Счетчик увеличиваете на единицу.
Ой ё, число 45 я случайно вместо 25 вставил, забыл исправить после тестирования. Но это уже не важно.
veles2008
31.01.2010, 11:07
Вы странным образом пытаетесь эту задачу решить.
Ряд букв – это строка. У каждого символа в строке есть индекс. Пользователь вводит символ, вы проверяете совпал ли он с текущим символом, определяемый каким-нибудь счетчиком. Если да, то переводите курсор на следующий. Счетчик увеличиваете на единицу.
Если я правильно понял то каждую букву нужно преобразовывать в символ. А если букв 50 и больше, то будет возрастать объём файла, а мне нужно экономить объём.
А если вы имели в виду другое, то можно увидеть пример?
Если я правильно понял то каждую букву нужно преобразовывать в символ. А если букв 50 и больше, то будет возрастать объём файла, а мне нужно экономить объём.
А если вы имели в виду другое, то можно увидеть пример?
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, Огромное спасибо!!!
Раз вас такой вариант устроил, то на заметку: метод Key.getAscii() возвращает только английские аски в независимости от раскладки. Для того, чтобы узнать соответствующий русский символ, необходимо будет в зависимости от того, нажат ли капслок, шифт, и кода клавиши, вычислять символ через соответствующие массивы, содержащие русские символы на позициях (индексах) равных соответствующим кодам клавиш.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.