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

reNiks 02.12.2010 12:47

Остановка героя при столкновение со стенами
 
Здравствуйте!
Вот пишу игру и с самого начала возникли проблемы:есть герой который двигается по полю с видом сверху, есть стены, при столкновении с которыми герой почему-то улетает в левый верхний угол сцены, хотя должен просто остановиться. Далее привожу код, box-герой, box1-box4- стены, вот код:


Код AS3:

//задаем переменные обозначающие скорость
var speedX:Number;
var speedY:Number;
 
//проверка столкновений задание значения скоростям
stage.addEventListener(Event.ENTER_FRAME, stolknovenie);
function stolknovenie (e:Event):void {
        if (box.hitTestObject(box4) || box.hitTestObject(box1)) {
                speedY == 0;
        }else{
                speedY == 3;
        }
}
 
 
stage.addEventListener(Event.ENTER_FRAME, stolknovenie2);
function stolknovenie2 (e:Event):void {
        if (box.hitTestObject(box2) || box.hitTestObject(box3)) {
                speedХ == 0;
        }else{
                speedX == 3;
        }
}
 
 
//собственно движение героя
box.stop();
stage.addEventListener(KeyboardEvent.KEY_DOWN, moveF);
 function moveF (e:KeyboardEvent):void {
        if (e.keyCode == Keyboard.UP) {
                box.y -= speedY;
            box.gotoAndStop(4);
        }else if (e.keyCode == Keyboard.DOWN) {
                box.y += speedY;
                box.gotoAndStop(2);
        }else if (e.keyCode == Keyboard.LEFT) {
                box.x -= speedX;
                box.gotoAndStop(3);
        }else if (e.keyCode ==Keyboard.RIGHT) {
                box.x += speedX;
                box.gotoAndStop(1);
        }
 }

Буду очень благодарен за помощь

leofit 02.12.2010 12:52

А в чем вопрос?

Alex_YAROST_22 02.12.2010 13:31

Архитектура настолько чудовищная, что становится дурно. А если объектов будет не 4 а 40? :)

Ну и, молодой человек, у вас вместо присваивания используется оператор сравнения :)

Добавлено через 1 минуту
мало того, столкновение надо проверять ДО ТОГО как произошло перемещение героя, а не после. иначе герой застрянет в стене или будет в ней как минимум "тонуть"

P.S.: писать наименование темы заглавными буквами запрещено правилами.

Mur4ik 02.12.2010 15:07

Нужно не
Код AS3:

speedY == 0;

а
Код AS3:

speedY = 0;

И замечания из предыдущего поста.

ChuwY 02.12.2010 15:51

Это — брат-близнец Sestem'a?

reNiks 02.12.2010 17:04

Цитата:

Сообщение от Alex_YAROST_22 (Сообщение 954278)
Архитектура настолько чудовищная, что становится дурно. А если объектов будет не 4 а 40? :)

Ну и, молодой человек, у вас вместо присваивания используется оператор сравнения :)

Добавлено через 1 минуту
мало того, столкновение надо проверять ДО ТОГО как произошло перемещение героя, а не после. иначе герой застрянет в стене или будет в ней как минимум "тонуть"

P.S.: писать наименование темы заглавными буквами запрещено правилами.

Извините я еще совсем новичок в этом деле. Что вы можете предложить по поводу архитектуры? Я смотрел по этой теме ничего дельного не нашел. А как использовать оператор присваивания вместо сравнения? И еще я совсем не понял по поводу проверки до столкновения: вроде же функции столкновения находятся перед функциями движения?

tsarapkabel 02.12.2010 17:40

Mur4ik же ответил про разницу = и == .

И если какая-то из стенок неподвижна, то проще ограничить персонажа по (x, y), чем проверять на столкновения.

reNiks 02.12.2010 17:55

спасибо про присвоение понял. ну а по поводу остальных вопросов?

Aber 02.12.2010 18:10

Цитата:

Извините я еще совсем новичок в этом деле. Что вы можете предложить по поводу архитектуры? Я смотрел по этой теме ничего дельного не нашел. А как использовать оператор присваивания вместо сравнения? И еще я совсем не понял по поводу проверки до столкновения: вроде же функции столкновения находятся перед функциями движения?
По этой теме много есть статей и исходников.
В твоём случае советую присмотреться к Тайловой структуре.
Создаешь сначала массив, который забиваешь числами. Например 1-земля, 2-препятствие, и так далее. Уже по этому массиву расставляешь объекты.

В общем поищи в интернете, не помню на каком сайте, но было много написано про создание игр. И в частности про твой случай.

reNiks 02.12.2010 19:44

Тэээкс. Покапал я в нете: не густо про тайлы есть, хотя может руки кривые. Может кто кинуть ссылок про написание игр с помощью тайлов, желательней разумеется на русском.


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

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