所以我在flash中创建了一个随机生成的迷宫。为此,我用块填充游戏空间,然后使用一种算法删除某些连接块以形成路径。
当我生成块时,flash将它们放在诸如(-1000,-1000)之类的屏幕外点没有问题,但是当我尝试之后删除它们以形成路径时,stage.getObjectsUnderPoint()不返回任何内容这些要点。
如果屏幕上没有对象,如何获取它?
答案 0 :(得分:3)
我假设您将所有这些块存储在数组或向量中。因此,您可以检查一个点并遍历所有块,检查该位置的块是什么。 例如:
//return type could be whatever the blocks are
private function getObjectUnderPoint(p:Point):Object{
for(var i:int = 0; i < blocks.length; i++){
//checks for the block at position p
if(blocks[i].x == p.x && blocks[i].y == p.y){
return block[i];
}
}
//return null if there is no block under point p
return null;
}
在你的情况下,在某一点上只有一个块,所以你不必返回一个块数组,但你可以根据需要修改它。此外,如果您没有将数据块存储在数组或向量中,我会高度推荐您这样做。
为了使这更加通用,您可以将舞台传递给该功能。然后检查那个阶段的孩子们。
示例:
private function getObjectUnderPoint(s:Stage, p:Point):Array{
var objects:Array = new Array();
for(var i:int = 0; i < s.numChildren; i++){
var obj:Object = s.getChildAt(i);
//checks for the objects at position p
if(obj.x == p.x && obj.y == p.y){
objects.push(obj);
}
}
return objects;
}
也可以更改函数内部的if语句,以检查点p是否位于对象内部,但此示例仅返回extact point位置。