Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Движение объекта на стрелки клавиатуры, Как правильно написать код 
:(
    Опции темы
PPie
Дата 8.12.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.12.2010

Репутация: нет
Всего: нет



Написал код для движения объекта на стрелки клавиатуры(в коде по стрелке влево), пересмотрел стопитсот раз,  не пойму почему не работает. Подскажите пожалуйста)Здесь это объект _player2, изначально был типа Sprite, потом MovieClip, никак не работает. Работаю в adobe flash bulider 4, пробовал в adobe flash cs3(по урокам easyflash) - тоже ничего не выходит. Может это быть из за работы с ноутбука?
Код

package
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.text.TextField;
    import flash.ui.Keyboard;
    
    
    public class arkanoid extends Sprite
    {
        private var _player1:Sprite = new Sprite();
        private var _player2: MovieClip = new MovieClip();
        private var _ball:Sprite = new Sprite();
        private var _stage:Sprite = new Sprite();
        public function arkanoid()
        {
            _stage.graphics.beginFill(0x000000);
            _stage.graphics.drawRect(40, 5, 400, 370);
            _stage.graphics.endFill();
            addChild(_stage);
            _player1.graphics.beginFill(0xff0000);
            _player1.graphics.drawRect(200, 10, 80, 5);
            _player1.graphics.endFill();
            addChild(_player1);
            _player2.graphics.beginFill(0xff0000);
            _player2.graphics.drawRect(200, 350, 80, 5);
            _player2.graphics.endFill();
            addChild(_player2);
            _ball.graphics.beginFill(0xff0000);
            _ball.graphics.drawCircle(240,180,5);
            _ball.graphics.endFill();
            addChild(_ball);
                                          stage.focus =  this;
            addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
        }
        public function onKeyDown(e:KeyboardEvent):void
        {
            if (e.keyCode == 37)
            {
                _player2.x --;
                
            }
        }
    }
}


Это сообщение отредактировал(а) PPie - 8.12.2010, 00:42
PM MAIL   Вверх
SoWa
Дата 8.12.2010, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 1
Всего: 74



Вот у тебя реакция на событие клавиатуры. Доведи её до такого вида:
Код

public function onKeyDown(e:KeyboardEvent):void
{
   trace("key down event!");
   if (...)...
}

И посмотри, а будет ли событие вызываться ;)
Потому что слушатель ты непонятно куда навешиваешь : addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
Может он на stage повесился, может на arkanoid, может ваще никуда не повесился.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
PPie
Дата 8.12.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.12.2010

Репутация: нет
Всего: нет



В консоль ничего не выводится ) Куда же нужно повесить слушатель? Делал элементарный пример из книги, тоже ничего в консоль не выводилось

Это сообщение отредактировал(а) PPie - 8.12.2010, 11:24
PM MAIL   Вверх
SoWa
Дата 8.12.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 1
Всего: 74



А щас и посмотрим... Хоть я флеш только для рисования использую, не могу в нем кодить
Вот так работает: 
Код

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

function onKeyDown(e:KeyboardEvent):void
        {
            if (e.keyCode == 37)
            {
                trace("koo");
            }
        }

В консоль выводятся сообщения, что правда, ивент случился, и даже опознает, какую кнопочку нажали.
Так как я флеш использую как рисовалку, то возникает закономерный вопрос: а если в фокусе окажется ченить другое, например кнопка - как будет вести себя этот обработчик события?
Кидаем на сцену кнопку, даем ей имя button1(Дельфийская привычка детства), и немного модифицируем обработчик события:
Код

function onKeyDown(e:KeyboardEvent):void
        {
            if (e.keyCode == 37)
            {
                button1.label=Math.random().toString();
            }
        }

Теперь в любом случае - что кнопка в фокусе, что нет - реакция на событие есть, и мы это можем наблюдать воочию smile

Удачных экспериментов!

Это сообщение отредактировал(а) SoWa - 8.12.2010, 18:04


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
zodiac
Дата 8.12.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.7.2009

Репутация: нет
Всего: нет



Не работало потому, что слушатель вешался не на глобальный объект, а на объект выше по цепочке видимости и как только этот объект терял фокус событие, само-собой, не выполнялось. 
Как уже сказал SoWa,
Код

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownListener);


PS Я бы советовал использовать для имени листенера не onKeyDown, a более "политкорректное", так скажем) например, onKeyDownListener.
PM MAIL   Вверх
PPie
Дата 8.12.2010, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.12.2010

Репутация: нет
Всего: нет



Всем спасибо)))на некоторый период времени забыл что консоль в фб только через дебаггер пашет)


Это сообщение отредактировал(а) PPie - 8.12.2010, 22:56
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.