AS3 BitmapData碰撞检测

时间:2012-06-19 20:56:46

标签: actionscript-3 bitmapdata

所以我正在开发一款Flash游戏,我正在使用bitmapdata来确定与地形的碰撞检测。我们的想法是拥有两组地形图块,一套是顶部的实际地形,另一套是仅有几种基本颜色来确定碰撞。这样,如果英雄与“高度图”上的某种颜色接触,他的运动可以停止,减速,他可以受到伤害或者上下放大以显示高度的变化。为了做到这一点,我需要通过一个数组添加一大堆高度图块,就像我添加tile本身一样。 通过bitmapdata执行此操作比我预期的要困难得多,并且在使用以下代码时仍然遇到错误。

这是我得到的错误:TypeError:错误#1010:术语未定义且没有属性。

据我所知,它来自以下代码:

var bitmapData:BitmapData = new BitmapData(heightContainer.heightMapClip.width, heightContainer.heightMapClip.height);

但我不知道我做错了什么。 这是完整的代码,虽然我还没有进入阵列部分,只需要先让它工作,我真的想尝试找出其余部分:

var heightMapClip = new heightMap();
heightContainer.addChild(heightMapClip);
var heightData:String;
var hContainer:Sprite = new Sprite();
heightMapClip.x=-200;
heightMapClip.y=-200;
var bitmapData:BitmapData = new BitmapData(heightContainer.heightMapClip.width, heightContainer.heightMapClip.height);
bitmapData.draw(heightContainer.heightMapClip);
var myHeightMap:Bitmap = new Bitmap(bitmapData);

heightContainer.addChildAt(hContainer,0);
heightContainer.hContainer.addChild(myHeightMap);

heightContainer.hContainer.addEventListener(Event.ENTER_FRAME, onClick);
function onClick(e:Event):void
{
    var obj:Sprite = e.currentTarget as Sprite;
    var myHeightMap:Bitmap = Bitmap(obj.getChildAt(0));
    var pixelValue:uint = heightContainer.myHeightMap.bitmapData.getPixel(mouseX,mouseY);
    heightData=pixelValue.toString(16);
    if(heightData=="99ff00"){
        trace("Collision Detected");
    }
}

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

heightContainer.addChild(heightMapClip);

通过执行此操作,您不会将属性heightMapClip添加到heightContainer

heightContainer.heightMapClip.width会产生错误

但这不会(只要它存在且具有width属性:))

heightMapClip.width

最好的问候 附: “意外解决”没有指明解决方案。写下你为回答问题所做的工作,以便其他人可以看到并从中学习。