Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите по простому AI платформера (http://www.flasher.ru/forum/showthread.php?t=137937)

dedalx 26.03.2010 02:22

Цитата:

Сообщение от VVall (Сообщение 895733)
Если персонаж поворачивает от краёв платформы, то он не может упасть с платформы. Если он не может упасть, зачем проверять наличие платформы под ним? Пусть ходит от маркера до маркера, хоть в воздухе, хоть где.

Я проверяю наличие платформы под ним чтобы по ней узнать в каких пределах ему можно ходить (до её концов).

Возникла другая проблема.

Код AS3:

// Проверяем где бокс моба
p.x=this.x;
p.y=this.y+this.height/2+1;
 
mobbox=stage.getObjectsUnderPoint(p);

Получили ссылку на бокс,типа [shape] отлично.

Проверяю пересечение с маркером моба (маркер нарисован программно, trace показывает что маркер тоже типа [shape]:

Код AS3:

 
if(markerLM.hitTestObject(mobbox))
{
        goleft=false;
        goright=true;
}

И получаю ошибку преобразования типов:

TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать []@2a27a779 в flash.display.DisplayObject. at game::Mob/UpdateWorld()

Вместо билеберды "[]@2a27a779" каждый кадр разный набор символов.
Хотя обе вещи [shape] судя по ошибке это не так..
Пробывал явно указать что:
public var mobbox:Shape;

не помогло, только меняется ошибка:
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать []@16cdcf59 в flash.display.Shape. at game::Mob/UpdateWorld()

Подскажите как поправить?

Добавлено через 29 минут
Разобрался) getObjectsUnderPoint возвращает массив, надо брать [0]

Добавлено через 39 минут
НОВАЯ ПРОБЛЕМА:

Когда один моб все нормально, он определяет свою стенку (даже если их несколько) и по ней правильно ездит. А когда добавляю второго моба начинаются ошибки:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".at game::Mob/UpdateWorld()

И работает только первый. Помоги пожалуйста что нетак.

dedalx 26.03.2010 03:03

Вложений: 1
Прикладываю исходники, подскажите как сделать чтобы работало когда несколько мобов.
Вроде все через this сделано, а работает только один моб.. другие как будто не относительно себя проверку делают.

dedalx 26.03.2010 03:46

Ошибка
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at game::Mob/UpdateWorld()\game\Mob.as:48]

На строке:
if(!mobbox.hitTestPoint(this.x-this.width/2,this.y+this.height/2+1,true))

Вылазиет когда больше одного моба

etc 26.03.2010 09:54

Очевидно, mobbox в этой строке — null.

dedalx 26.03.2010 15:19

А почему? Ведь я тупо скопировал на сцене моба с платформой и поместил их рядом. То есть под ним есть эта платформа также как и там.

RandomUser 26.03.2010 15:39

Ты проверяешь нижнюю точку моба. Видимо, этот моб на 0.5-2 пикселя выше стоит чем надо. Опусти моба или эту точку чуть ниже.

Код AS3:

public function Mob():void {
 
        // Проверяем где бокс моба
        p.x=this.x;
        p.y=this.y+this.height/2+5; // как-то так...
        mobboxdata=stage.getObjectsUnderPoint(p);
        mobbox=mobboxdata[0];
 
        // Листенеры
        addEventListener(Event.ENTER_FRAME, UpdateWorld);
}


dedalx 26.03.2010 15:49

Спасибо заработало, почему то при простом копировании сместился моб..


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

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