做 hittest 时,圆圈对迷宫的不可见部分做出反应

Posted

技术标签:

【中文标题】做 hittest 时,圆圈对迷宫的不可见部分做出反应【英文标题】:When doing hittest, circle reacts to invisible part of maze 【发布时间】:2016-04-23 17:01:15 【问题描述】:

我正在做一个迷宫游戏。我有两个对象需要对 hittest 做出反应,我的小圆圈(称为“brikke”)和迷宫本身(称为“form”)。 (我是挪威人)

我在 flash 中绘制了迷宫的一部分(作为一个大对象,连接)并将其转换为符号(电影剪辑),就像圆圈一样。

我的问题是,当我在做 hittest 时,圆圈似乎会对迷宫的不可见部分做出反应,比如 PNG。它对我绘制的迷宫中的不可见“像素”做出反应,即使我在 Flash 中绘制它,它也不是 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

如果您的“brikke”形状较大,您可以在其中创建更多点,然后检查每个点的 hitTestPoint。请记住使用localToGlobalglobalToLocal 确保您在相同的坐标中工作。

【讨论】:

以上是关于做 hittest 时,圆圈对迷宫的不可见部分做出反应的主要内容,如果未能解决你的问题,请参考以下文章

如何对儿童可见度的变化做出反应?

HTML5Canvas,记住最后一个可见的实例

“唯一可见的孩子”元素?

确保节点可见

SVG <circle> 填充覆盖前一个圆圈

CSS 样式在刷新后显示,然后在 Knockout 中不可见