PDA

Просмотр полной версии : Помощь с hittest (никак не дойдет)


Guyv3r
24.12.2012, 11:46
Здравствуйте, други :)
Написал скрипт передвижения персонажа, не пойму суть манипуляции с hittest :(
Есть код:
onClipEvent(load)

{

var speedX:Number=0;

var speedY:Number=0;

}

onClipEvent(enterFrame)

{

if(Key.isDown(Key.RIGHT)) speedX+=0.5;

if(Key.isDown(Key.LEFT)) speedX-=0.5;



if(Key.isDown(Key.UP)) speedY-=0.5;

if(Key.isDown(Key.DOWN)) speedY+=0.5;

speedX*=0.98;

speedY*=0.98;

_x+=speedX;

_y+=speedY;

}
onClipEvent(enterFrame)

{
if (this.hitTest(wall)) {
gotoAndStop(2);
}
}
Проблема в том, что при столкновении с объектом wall ничего не происходит. Instance name указал правильно, сам hittest уже куда только не пихал, не пашет... В идеале вообще сделать отскок от стены, а gotoAndStop(2) в скрипте указал только ради теста.

Hauts
24.12.2012, 12:16
Не пишите код на клипах. Вообще никогда.

Задайте instance name вашему персонажу и пишите код в кадре хотя бы.

onClipEvent(enterFrame)

{
if (this.hitTest(wall)) {
gotoAndStop(2);
}
}

Попробуйте сюда trace(this) поставить и посмотреть, на что this указывает.

Sergey_A
24.12.2012, 12:27
Вот вам простой примерчик кода с hittest:
var speedX:Number=0;
var speedY:Number=0;

this.stoun.onRelease = function() {
this.onEnterFrame = function() {
speedY-=0.5;
stoun._y+=speedY;
trace(speedY);
if (stoun.hitTest(wall)) {
delete this.onEnterFrame
}
}
}
Сверху на сцене создаем мувик wall, снизу под ним - мувик stoun. По нажатию на stoun он ползет вверх, когда долетает до wall - останавливается. Весь код пишем в первом кадре.
Тут, наверное, тоже погрешности есть - хотелось бы услышать от здешних гуру - какие.

Добавлено через 18 минут
Вот пример посложнее - стена рисуется сверху и снизу, а stoun реагирует на клавиши "вверх" и "вниз":

var speedY:Number=0;

var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() {
switch (Key.getCode()) {
case Key.UP :
delete _root.onEnterFrame;
speedY=0;
_root.onEnterFrame = function() {
speedY-=0.5;
stoun._y+=speedY;
if (stoun.hitTest(wall)) {
delete this.onEnterFrame
}
}
break;
case Key.DOWN :
delete _root.onEnterFrame;
speedY=0;
_root.onEnterFrame = function() {
speedY+=0.5;
stoun._y+=speedY;
if (stoun.hitTest(wall1)) {
delete this.onEnterFrame
}
}
break;
}
};
Key.addListener(keyListener_obj);