При выполнении хитстейта круг реагирует на невидимую часть лабиринта
Я делаю игру-лабиринт. У меня есть два объекта, которые должны реагировать на хит-тест, мой маленький круг (называемый "брикке") и сам лабиринт (называемый "формой"). (Я норвежец)
Я нарисовал часть лабиринта во вспышке (как один большой объект, связанный) и преобразовал его в символ (мувиклип), как для круга.
Моя проблема в том, что когда я выполняю тестирование, круг, кажется, реагирует на невидимые части лабиринта, как PNG. Он реагирует на невидимые "пиксели" в моем рисунке лабиринта, даже если я нарисовал его внутри вспышки, это не png. Но форма лабиринта прямоугольная.
Я также использую клавиатуры для управления кругом вокруг лабиринта.
Любые идеи о том, как я могу сделать эту работу? Сделайте круг самым хитрым с формой лабиринта, и только так, используя клавиатуры для перемещения по кругу. Поэтому, когда круг попадает в "стены" лабиринта, он снова возвращается в начало.
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
public class Dokument extends MovieClip {
var startskjerm: Startskjerm=new Startskjerm();
var startknapp: Startknapp=new Startknapp();
var bakgrunnbane: Bakgrunnbane=new Bakgrunnbane();
var brikke: Brikke=new Brikke();
var bane: Bane=new Bane();
var form: Form=new Form();
var regler: Regler=new Regler();
var spilleregler: Spilleregler=new Spilleregler();
var tilbake: Tilbake=new Tilbake();
public function Dokument() {
addChild(startskjerm);
addChild(startknapp);
addChild(regler);
startknapp.x= 1020;
startknapp.y= 350;
regler.x= 920;
regler.y= 450;
startknapp.addEventListener(MouseEvent.CLICK, trykket);
regler.addEventListener(MouseEvent.CLICK, klikket);
stage.addEventListener(KeyboardEvent.KEY_DOWN, tastetrykk);
}
public function trykket (evt:MouseEvent) {
removeChild(startknapp);
removeChild(startskjerm);
addChild(bakgrunnbane);
addChild(bane);
addChild(form);
addChild(brikke);
brikke.x= 200;
brikke.y= 95;
bane.x= 630;
bane.y= 485;
form.x= 628;
form.y= 449;
}
public function klikket (evt:MouseEvent) {
removeChild(regler);
removeChild(startskjerm);
addChild(spilleregler);
addChild(tilbake);
tilbake.x= 1100;
tilbake.y= 850;
tilbake.addEventListener(MouseEvent.CLICK, tilbakeklikk);
}
public function tilbakeklikk (evt:MouseEvent) {
removeChild(spilleregler);
removeChild(tilbake);
addChild(startskjerm);
addChild(startknapp);
addChild(regler);
tilbake.x= 1100;
tilbake.y= 850;
startknapp.x= 1020;
startknapp.y= 350;
regler.x= 920;
regler.y= 450;
tilbake.addEventListener(MouseEvent.CLICK, tilbakeklikk);
}
public function tastetrykk(evt:KeyboardEvent) {
if(evt.keyCode==Keyboard.LEFT){
brikke.x= brikke.x-8;
}
if(evt.keyCode==Keyboard.RIGHT){
brikke.x= brikke.x+8;
}
if(evt.keyCode==Keyboard.UP){
brikke.y= brikke.y-8;
}
if(evt.keyCode==Keyboard.DOWN){
brikke.y= brikke.y+8;
}
if(brikke.hitTestObject(form)== true) {
trace('truffet');
}
}
}
}
1 ответ
Попробуй использовать hitTestPoint
вместо hitTestObject
,
Если ваш "брикке" имеет большую форму, вы можете создать в нем больше точек, а затем проверить HitTestPoint для каждой точки. Помните, чтобы использовать localToGlobal
или же globalToLocal
чтобы быть уверенным, что вы работаете в тех же координатах.