![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2014
Сообщений: 30
|
Попробовал я сделать так:
var leftPressed:Boolean = false; var rightPressed:Boolean = false; var stopwolf1:Stopwolf = new Stopwolf(); addChild(stopwolf1); stopwolf1.x = 100 stopwolf1.y = 100 var gowolf1:Gowolf = new Gowolf(); addChild(gowolf1); gowolf1.x = 100 gowolf1.y = 100 var gowolfleft1:Gowolfleft = new Gowolfleft(); addChild(gowolfleft1); gowolfleft1.x = 100 gowolfleft1.y = 100 var speed = 30; gowolf1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); gowolfleft1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); stopwolf1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_SetKeyPressed); stage.addEventListener(KeyboardEvent.KEY_UP, fl_UnsetKeyPressed); function fl_MoveInDirectionOfKey(event:Event) { if (leftPressed) //если нажата только(!) левая клавиша - шагаем влево { gowolfleft1.x -= speed; removeChild(stopwolf1); } else if (rightPressed) //если нажата только(!) правая клавиша - шагаем вправо { gowolf1.x += speed; removeChild(stopwolf1); } else // если не нажата ни одна из клавиш или нажаты обе одновременно - стоим { stopwolf1.gotoAndStop (1); removeChild(gowolf1); } } function fl_SetKeyPressed(event:KeyboardEvent):void { switch (event.keyCode) { case Keyboard.LEFT: { leftPressed = true; break; } case Keyboard.RIGHT: { rightPressed = true; break; } } } function fl_UnsetKeyPressed(event:KeyboardEvent):void { switch (event.keyCode) { case Keyboard.LEFT: { leftPressed = false; break; } case Keyboard.RIGHT: { rightPressed = false; break; } } } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
stopwolf1.visible = true; gowolf1.visible = false; gowolfleft1.visible = false; function fl_MoveInDirectionOfKey(event:Event):void { if (leftPressed) //если нажата только(!) левая клавиша - шагаем влево { if (rightPressed) // если нажаты обе одновременно - стоим { stopwolf1.visible = true; gowolf1.visible = false; gowolfleft1.visible = false; return; // прекращаем выполнение функции } gowolfleft1.x -= speed; gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = false; gowolfleft1.visible = true; } else if (rightPressed) //если нажата только(!) правая клавиша - шагаем вправо { gowolf1.x += speed; gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = true; gowolfleft1.visible = false; } else // если не нажата ни одна из клавиш - стоим { stopwolf1.visible = true; gowolf1.visible = false; gowolfleft1.visible = false; } }
__________________
Reality.getBounds(this); |
|
|||||
|
Wolsh, что-то ты с дублированием и вложенностью переборщил =)
function fl_MoveInDirectionOfKey(event:Event):void { if ((leftPressed && rightPressed) || !(leftPressed && rightPressed)) { stopwolf1.visible = true; gowolf1.visible = false; gowolfleft1.visible = false; } else if (leftPressed) { gowolfleft1.x -= speed; gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = false; gowolfleft1.visible = true; } else { gowolf1.x += speed; gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = true; gowolfleft1.visible = false; } }
__________________
тут я |
|
|||||
|
Регистрация: Feb 2014
Сообщений: 30
|
И первый и второй вариант ошибок не выдаёт но чего то не реагирует на нажатие никак
Код: var leftPressed:Boolean = false; var rightPressed:Boolean = false; var stopwolf1:Stopwolf = new Stopwolf(); addChild(stopwolf1); stopwolf1.x = 100 stopwolf1.y = 100 var gowolf1:Gowolf = new Gowolf(); addChild(gowolf1); gowolf1.x = 100 gowolf1.y = 100 var gowolfleft1:Gowolfleft = new Gowolfleft(); addChild(gowolfleft1); gowolfleft1.x = 100 gowolfleft1.y = 100 var speed = 30; gowolf1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); gowolfleft1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); stopwolf1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_SetKeyPressed); stage.addEventListener(KeyboardEvent.KEY_UP, fl_UnsetKeyPressed); function fl_MoveInDirectionOfKey(event:Event):void { if ((leftPressed && rightPressed) || !(leftPressed && rightPressed)) { stopwolf1.visible = true; gowolf1.visible = false; gowolfleft1.visible = false; } else if (leftPressed) { gowolfleft1.x -= speed; gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = false; gowolfleft1.visible = true; } else { gowolf1.x += speed; gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = true; gowolfleft1.visible = false; } } function fl_SetKeyPressed(event:KeyboardEvent):void { switch (event.keyCode) { case Keyboard.LEFT: { leftPressed = true; break; } case Keyboard.RIGHT: { rightPressed = true; break; } } } function fl_UnsetKeyPressed(event:KeyboardEvent):void { switch (event.keyCode) { case Keyboard.LEFT: { leftPressed = false; break; } case Keyboard.RIGHT: { rightPressed = false; break; } } } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
С чего бы им реагировать, если при любом раскладе сработает только первый блок.
КорДум, моя то цель была помочь человеку понять логику. А то что ты написал... "если true или false стоим, а иначе двигаемся". Ну.. не знаю, надо подумать...
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2014
Сообщений: 30
|
Попробовал так:
var leftPressed:Boolean = false; var rightPressed:Boolean = false; var stopwolf1:Stopwolf = new Stopwolf(); addChild(stopwolf1); stopwolf1.x = 100 stopwolf1.y = 100 var gowolf1:Gowolf = new Gowolf(); addChild(gowolf1); gowolf1.x = 100 gowolf1.y = 100 var gowolfleft1:Gowolfleft = new Gowolfleft(); addChild(gowolfleft1); gowolfleft1.x = 100 gowolfleft1.y = 100 var speed = 30; stage.addEventListener(KeyboardEvent.KEY_DOWN, go); function go(e:KeyboardEvent):void { if (e.keyCode==Keyboard.LEFT) { gowolfleft1.x -= speed; gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = false; gowolfleft1.visible = true; } if (e.keyCode==Keyboard.RIGHT) { gowolf1.x += speed; gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = true; gowolfleft1.visible = false; } else // если не нажата ни одна из клавиш - стоим { stopwolf1.visible = true; gowolf1.visible = false; gowolfleft1.visible = false } } Добавлено через 17 часов 19 минут Вот: var leftPressed:Boolean = false; var rightPressed:Boolean = false; var stopwolf1:Stopwolf = new Stopwolf(); addChild(stopwolf1); stopwolf1.x = 100 stopwolf1.y = 100 var gowolf1:Gowolf = new Gowolf(); addChild(gowolf1); gowolf1.x = 100 gowolf1.y = 100 gowolf1.visible = false; var gowolfleft1:Gowolfleft = new Gowolfleft(); addChild(gowolfleft1); gowolfleft1.x = 100 gowolfleft1.y = 100 gowolfleft1.visible = false; var speed = 30; stage.addEventListener(KeyboardEvent.KEY_DOWN, go); function go(e:KeyboardEvent):void { { if (e.keyCode==Keyboard.LEFT) //если нажата только(!) левая клавиша - шагаем влево { gowolfleft1.x -= speed; gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = false; gowolfleft1.visible = true; return; } else if (e.keyCode==Keyboard.RIGHT) { gowolf1.x += speed; gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов gowolf1.visible = true; gowolfleft1.visible = false; return; } else // если не нажата ни одна из клавиш - стоим { stopwolf1.visible = true; gowolf1.visible = false; gowolfleft1.visible = false; } } } Добавлено через 23 часа 18 минут Ура Ура! ) Почти победил! Но вот только он шагать начинает как то странно, как бы с пробуксовкой, нажимаю например влево появляется символ gowolfleft, но передвигаться начинает он спустя примерно секунду, как это можно победить? Вот код: var leftPressed:Boolean = false; var rightPressed:Boolean = false; var stopwolf1:Stopwolf = new Stopwolf(); addChild(stopwolf1); stopwolf1.x = 100 stopwolf1.y = 100 var stopwolf2:Stopwolf = new Stopwolf(); addChild(stopwolf2); stopwolf2.x = 100 stopwolf2.y = 100 stopwolf2.scaleX = -1; // стоящий волк отражен по горизонтали stopwolf2.visible = false; // устанавливаем видимость клипов var gowolf1:Gowolf = new Gowolf(); addChild(gowolf1); gowolf1.x = 100 gowolf1.y = 100 gowolf1.visible = false; // устанавливаем видимость клипов var gowolfleft1:Gowolf = new Gowolf(); addChild(gowolfleft1); gowolfleft1.x = 100 gowolfleft1.y = 100 gowolfleft1.visible = false; // устанавливаем видимость клипов gowolfleft1.scaleX = -1; // идущий волк вправо отражен по горизонтали var speed = 30; stage.addEventListener(KeyboardEvent.KEY_DOWN, go); stage.addEventListener(KeyboardEvent.KEY_UP, st); function st(e:KeyboardEvent):void // функция отпущеных клавиш { if (e.keyCode == Keyboard.LEFT) { stopwolf2.visible = true; gowolf1.visible = false; gowolfleft1.visible = false; } else if (e.keyCode == Keyboard.RIGHT) { stopwolf1.visible = true; gowolf1.visible = false; gowolfleft1.visible = false; } } function go(e:KeyboardEvent):void { { if (e.keyCode==Keyboard.LEFT) //если нажата только(!) левая клавиша - шагаем влево { gowolfleft1.x -= speed; gowolf1.x = stopwolf1.x = stopwolf2.x = gowolfleft1.x; // смещаем все клипы вместе stopwolf2.visible = false; // устанавливаем видимость клипов stopwolf1.visible = false; gowolf1.visible = false; gowolfleft1.visible = true; return; } else if (e.keyCode==Keyboard.RIGHT) { gowolf1.x += speed; gowolfleft1.x = stopwolf2.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе stopwolf1.visible = false; // устанавливаем видимость клипов stopwolf2.visible = false; gowolf1.visible = true; gowolfleft1.visible = false; return; } } } Последний раз редактировалось tihomir; 28.02.2014 в 14:22. |
|
|||||
|
Регистрация: Feb 2014
Сообщений: 30
|
Хотелось бы узнать) всё таки как то можно "пробуксовку" убрать?)
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
1. Зачем Вам столько скобок?
2. Зачем Вам else, Вы думаете e.keyCode может быть одновременно и LEFT и RIGHT? 3. В коде нет пробуксовки. Правда, понять код уже решительно невозможно из-за удручающих названий переменных и абсолютного непонимания сколько там у Вас клипов и кто за что отвечает. Дайте нормальные имена без непонятных цифр и уберите из кода лишнее. Добавлено через 4 часа 19 минут Пробуксовка получается, потому что движение происходит только на событие нажатия клавиши. Клавиатуры устроены так, что когда вы нажимаете клавишу, посылается событие. Затем полсекунды тишины, и если вы не отпустили клавиши, клавиатура начинает генерить событие нажатия этой клавиши с какой-то своей частотой. Это то, чем все мы пользуемся чтобы печатать линию -----------------------------------. Попробуйте и увидите свою "пробуксовку". Строго по вашему коду объект должен двигаться только тогда, когда пользователь нажал клавишу. Один раз на 30 пикселей. Нажал еще раз — еще 30 пикселей.
__________________
Reality.getBounds(this); |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Надо вешать движение на ентерфрейм. Вспомните, зачем у вас до сих пор болтаются два флага leftPressed и rightPressed?
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|