Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Взаимодействие классов (http://www.flasher.ru/forum/showthread.php?t=206584)

Godwarlock 13.02.2014 04:26

Взаимодействие классов
 
В общем надо организовать управление персонажем. Для этого я создал класс player

Код AS3:

package AS  {
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.ui.Keyboard;
        import flash.display.Sprite;
 
 
        public class player extends Sprite
 {
  var left_press:Boolean;
  var up_press:Boolean;
  var right_press:Boolean;
  var down_press:Boolean;
  var _speed:uint;
 
                public function player()
                {
                addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
        addEventListener(KeyboardEvent.KEY_UP, keyUpListener);
        addEventListener(Event.ENTER_FRAME, go);
                _speed = 3;
                }
public function keyDownListener (e:KeyboardEvent):void
{
if (e.keyCode==65) left_press = true;
if (e.keyCode==87) up_press = true;
if (e.keyCode==68) right_press = true;
if (e.keyCode==83) down_press = true;
}
public function keyUpListener(e:KeyboardEvent):void
{
if (e.keyCode==65) left_press = false;
if (e.keyCode==87) up_press = false;
if (e.keyCode==68) right_press = false;
if (e.keyCode==83) down_press = false;
}
public function go(e:Event):void
{
if (left_press) igrok.x -=_speed;
if (up_press) igrok.y -=_speed;
if (right_press) igrok.x +=_speed;
if (down_press) igrok.y +=_speed;
 
}
                }
 
        }

То есть нажимаем на кнопки и igrok движется. Основной класс Main, где создается этот самый игрок

Код AS3:

package AS 
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.events.Event;
import flash.display.DisplayObject;
import flash.display.Stage;
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
        public class Main extends MovieClip
        {
                private var igrok:player;
    public function Main()
  {
  createigrok();
 
  clicki();
 
  }
 
public function createigrok()
{
  {
      igrok = new player;
      igrok.x = 50;
      igrok.y = 50;
      igrok.name = "ssss";
          trace('Стопудово новый игрок');
  }
  addChild(igrok);
  trace('Чего-то добавили, типа...');
}
 
public function clicki()
{
  rembut.addEventListener(MouseEvent.CLICK, onClicks);
}
 
function onClicks(event:MouseEvent):void
{
 
 
  removeChild(igrok);
  trace("Удаляем игрока");
 
 
        }
        }
}

Также есть спрайт, с синим кружочком, который создается на сцене называется player и связывание AS3 player. Когда я компилирую флешку, вроде никаких ошибок не выдаёт, но и объект не двигается по нажатию кнопок. Что мне надо сделать, чтобы это всё работало?)

RonEXI 13.02.2014 09:42

Adobe Flash перехватывает нажатия кнопок иногда, для своего интерфейса. Попробуйте запустить флэшку отдельно из папки через Flash Player, или через браузер, и проверить.

mikhailk 13.02.2014 12:09

Надо стейдж подписать на события клавиатуры.

Godwarlock 13.02.2014 16:10

Цитата:

Сообщение от mikhailk (Сообщение 1159747)
Надо стейдж подписать на события клавиатуры.

Неа. Не помогло

belv 13.02.2014 16:21

Я может чего-то не понял, а igrok в классе player, это что? Которому Вы хотите поменять позицию.

Akopalipsis 13.02.2014 16:22

А нарисованный круг не является классом? И Вы опять в кадрах пишите?

samana 13.02.2014 16:35

У вас всё должно работать. Я проверил у себя, и конечно подписал на клавиатуру stage (как подсказал mikhailk), и всё двигалось. Но так как stage в конструкторе игрока может быть не доступна, подпишитесь на
Код AS3:

public function player()
                {
                        addEventListener(Event.ADDED_TO_STAGE, addedToStage);
                }
 
                private function addedToStage(e:Event):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
 
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
                        stage.addEventListener(KeyboardEvent.KEY_UP, keyUpListener);
                        addEventListener(Event.ENTER_FRAME, go);
                        _speed = 3;
                }


Wolsh 13.02.2014 16:38

Ну конечно недоступен stage в КОНСТРУКТОРЕ игрока. Он же еще не на сцене...

Godwarlock 13.02.2014 18:37

Вложений: 1
Фиг его знает, не получается

samana 13.02.2014 18:45

А что же это за чудеса в классе игрока?
Код AS3:

public function go(e:Event):void 
{
if (left_press) ssss.x -=_speed;
if (up_press) ssss.y -=_speed;
if (right_press) ssss.x +=_speed;
if (down_press) ssss.y +=_speed;
}

Ведь вам надо перемещать экземпляр класса player. А ssss - не существует. Это просто строка для имени. Замените все ssss на this (в классе player) )
p.s. странно что это скомпилировалось, ведь свойства ssss не существует...


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

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