Форум 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=202191)

bes4etnov 02.07.2013 20:25

Движение персонажа
 
Здравствуйте, ребят, я новичек, и мне кое-что не понятно.. Собираюсь игрушку сделать) И столкнулся с такой проблемой: делал движение объекта стрелками, на временной диаграмме если код писать, то все получается; а в классе не работает..
Вот код) мы проверяем, нажаты ли клавиши, а исходя из этого перемещаем объект в нужные нам стороны.
Код AS3:

//объект называется cub
import flash.events.KeyboardEvent;
import flash.events.Event;
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
stage.addEventListener(KeyboardEvent.KEY_UP, onKU);
 
var up:Boolean = false;
var down:Boolean = false;
var right:Boolean = false;
var left:Boolean = false;
 
var upS:Number = 1;
var downS:Number = 1;
var rightS:Number = 1;
var leftS:Number = 1;
 
function onKD(e:KeyboardEvent):void {
        if (e.keyCode == 37) {
                left = true;
        }
        if (e.keyCode == 38) {
                up = true;
        }
        if (e.keyCode == 39) {
                right = true;
        }
        if (e.keyCode == 40) {
                down = true;
        }
}
function onKU(e:KeyboardEvent):void {
        if (e.keyCode == 37) {
                left = false;
        }
        if (e.keyCode == 38) {
                up = false;
        }
        if (e.keyCode == 39) {
                right = false;
        }
        if (e.keyCode == 40) {
                down = false;
        }
}
 
stage.addEventListener(Event.ENTER_FRAME, onMovoHero);
 
 
function onMovoHero(e:Event):void {
        if (left) {
                cub.x -= leftS;
                leftS ++;
        } else {
                cub.x -= leftS;
                leftS *= .7;
                }
        if (up) {
                cub.y -=upS;
                upS ++ ;
        } else {
                cub.y -=upS;
                upS *= .7;
        }
        if (right) {
                cub.x += rightS;
                rightS ++;
        } else {
                cub.x += rightS;
                rightS *= .7;
        }
        if (down) {
                cub.y += downS;
                downS ++;
        } else {
                cub.y += downS
                downS *= .7;
        }
}
 
stage.addEventListener(Event.ENTER_FRAME, sled);
 
function sled(e:Event):void {
        swit
}

С ООП у меня не очень. Я так класс написал; видимо, я что-то не так делал..
Код AS3:

package 
{
 
        import flash.display.MovieClip;
        import flash.display.Stage;
 
        public class Movement extends MovieClip
        {
                var up:Boolean = false;
                var down:Boolean = false;
                var right:Boolean = false;
                var left:Boolean = false;
 
                var upS:Number = 1;
                var downS:Number = 1;
                var rightS:Number = 1;
                var leftS:Number = 1;
 
                public function Movement()
                {
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
                        stage.addEventListener(KeyboardEvent.KEY_UP, onKU);
                        stage.addEventListener(Event.ENTER_FRAME, onMoveHero);
                }
 
                public function onKD(e:KeyboardEvent):void
                {
                        if (e.keyCode == 37)
                        {
                                left = true;
                                trace("12312")
                        }
                        if (e.keyCode == 38)
                        {
                                up = true;
                        }
                        if (e.keyCode == 39)
                        {
                                right = true;
                        }
                        if (e.keyCode == 40)
                        {
                                down = true;
                        }
                }
 
                public function onKU(e:KeyboardEvent):void
                {
                        if (e.keyCode == 37)
                        {
                                left = false;
                        }
                        if (e.keyCode == 38)
                        {
                                up = false;
                        }
                        if (e.keyCode == 39)
                        {
                                right = false;
                        }
                        if (e.keyCode == 40)
                        {
                                down = false;
                        }
                }
 
                public function onMoveHero(e:Event):void
                {
                        if (left)
                        {
                                trace("left");
                                this.x -=  leftS;
                                leftS++;
                        }
                        else
                        {
                                this.x -=  leftS;
                                leftS *=  .7;
                        }
                        if (up)
                        {
                                this.y -=  upS;
                                upS++;
                        }
                        else
                        {
                                this.y -=  upS;
                                upS *=  .7;
                        }
                        if (right)
                        {
                                this.x +=  rightS;
                                rightS++;
                        }
                        else
                        {
                                this.x +=  rightS;
                                rightS *=  .7;
                        }
                        if (down)
                        {
                                this.y +=  downS;
                                downS++;
                        }
                        else
                        {
                                this.y +=  downS;
                                downS *=  .7;
                        }
                }
 
        }
 
}
/* в основном .fla файле создавал экземпляр класса:
 
var cub:Movement = new Movement;
 
addChild(cub);
 
Но мувик не двигался и вообще не реагировал...................*/


Dip52 02.07.2013 21:25

Проблема в том, что в первом примере ты двигаешь своего персонажа, а во втором двигаешь сцену.

Код AS3:

var cub:Movement = new Movement;
 
addChild(cub);


Ты добавляешь на сцену свой класс?

Код AS3:

package 
{
 
        import flash.display.MovieClip;
        import flash.display.Stage;
 
        public class Movement extends MovieClip
        {
                var cub:MovieClip;
                var up:Boolean = false;
                var down:Boolean = false;
                var right:Boolean = false;
                var left:Boolean = false;
 
                var upS:Number = 1;
                var downS:Number = 1;
                var rightS:Number = 1;
                var leftS:Number = 1;
 
                public function Movement(c:MovieClip)
                {
                        cub = c;
                        this.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
                        this.addEventListener(KeyboardEvent.KEY_UP, onKU);
                        cub.addEventListener(Event.ENTER_FRAME, onMoveHero);
                }
 
                public function onKD(e:KeyboardEvent):void
                {
                        if (e.keyCode == 37)
                        {
                                left = true;
                                trace("12312")
                        }
                        if (e.keyCode == 38)
                        {
                                up = true;
                        }
                        if (e.keyCode == 39)
                        {
                                right = true;
                        }
                        if (e.keyCode == 40)
                        {
                                down = true;
                        }
                }
 
                public function onKU(e:KeyboardEvent):void
                {
                        if (e.keyCode == 37)
                        {
                                left = false;
                        }
                        if (e.keyCode == 38)
                        {
                                up = false;
                        }
                        if (e.keyCode == 39)
                        {
                                right = false;
                        }
                        if (e.keyCode == 40)
                        {
                                down = false;
                        }
                }
 
                public function onMoveHero(e:Event):void
                {
                        if (left)
                        {
                                trace("left");
                                cub.x -=  leftS;
                                leftS++;
                        }
                        else
                        {
                                cub.x -=  leftS;
                                leftS *=  .7;
                        }
                        if (up)
                        {
                                cub.y -=  upS;
                                upS++;
                        }
                        else
                        {
                                cub.y -=  upS;
                                upS *=  .7;
                        }
                        if (right)
                        {
                                cub.x +=  rightS;
                                rightS++;
                        }
                        else
                        {
                                cub.x +=  rightS;
                                rightS *=  .7;
                        }
                        if (down)
                        {
                                cub.y +=  downS;
                                downS++;
                        }
                        else
                        {
                                cub.y +=  downS;
                                downS *=  .7;
                        }
                }
 
        }
 
}
 
/* В исходнике fla пишешь: var movement:Movement = new Movement(cub); //В качестве аргумента название твоего героя.
*/


bes4etnov 04.07.2013 17:05

Сделал все, как вы сказали, но все равно не пашет))
Я еще импортировал события (в тот раз забыл).
Прикреплю файлы.

belv 04.07.2013 17:18

А где файлы искать?

bes4etnov 04.07.2013 17:19

.fla
.as

belv 04.07.2013 17:49

Вложений: 1
Вот архив с Вашим кодом, обратите внимание , когда откроете .fla в свойствах сцены и в поле Class заданно имя класса(это так называемый класс входа в программу).Ну соответственно пришлось подправить и ваш класс.

bes4etnov 04.07.2013 21:15

Спасибо за помощь!
Правда это получается класс, который запускается вместе с программой; а как можно сделать объект со свойствами этого класса (то есть можно было создавать несколько таких объектов и давать им разные имена, например)?

belv 04.07.2013 21:59

Берете символ в библиотеке ,нажимаете правой кнопкой мыши , в списке выбираете свойства , и в поле базового класса вместо flash.display.MovieClip пишите имя своего класса , с требуемыми свойствами.чтобы создать экземпляр этого мувика , пишите так как вы писали
var cub = new Cub();
addChild(cub);
Он будет обладать всем тем что вы напишете в классе.

bes4etnov 05.07.2013 14:42

Спасибо, что объяснили)!!

bes4etnov 16.07.2013 20:43

Блин. У меня все равно не получилось так как вы сказали..
Я переписал заново:
.fla
.as
Помогите разобраться, почему не работает програмка.. МувиКлип просто стоит на месте..
Это чем-то связанно со слушателями событий клавиатуры.. Они не работают, не знаю, почему...


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

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