我画了一个名为Map的movieclip。它有一个名叫Wall的孩子。我正在尝试创建一个函数,如果该块中有某些东西,则返回一个2d tile数组,用于寻路。
问题是,levelGrid完全是假的。我不确定我做错了什么。
我用鲜红色填充整个movieclip(Wall),是的,它仍然返回false。
Map和Wall的x和y都是0,所以我认为hitTestPoint不应该接受全局x / y。
它们被添加到显示列表中。
我的其他运动测试工作正常。
我的代码:
public function levelMap() {
for (var i = 0; i < height / 25; i++) {
levelGrid[i] = [];
for (var j = 0; j < width / 25; j++) {
levelGrid[i][j] = this.getChildByName("Wall").hitTestPoint(j*25,i*25,true);
}
}
trace(levelGrid);
}
提前致谢(levelGrid是一个类变量)
答案 0 :(得分:1)
我用你的代码进行了视觉测试。我没有改变任何功能,所以我认为你的问题是你的图形。检查图形的宽度,高度位置。如果你在数组中没有得到任何东西,那么这些值可能没有正确设置。
每个点代表此测试中的hitTestPoint。如果它的绿色你有一个命中(真实的返回值)。红色意味着没有打击。希望这可以帮助。
TestHitPoint.as
package
{
import flash.display.Sprite;
public class TestHitPoint extends Sprite
{
private static const TILE_SIZE : int = 25;
private var levelGrid : Array;
public function TestHitPoint()
{
// add graphics to test
addChild( new WallGraphics() );
// fix array
levelGrid = new Array();
// loop
for (var i : int = 0; i < height / TILE_SIZE; i++)
{
levelGrid[i] = [];
for (var j : int = 0; j < width / TILE_SIZE; j++)
{
var success : Boolean = this.getChildByName("Wall").hitTestPoint(j*TILE_SIZE, i*TILE_SIZE, true);
levelGrid[i][j] = success;
addChild( new PositionMarker(j*TILE_SIZE, i*TILE_SIZE, success) );
}
}
}
public function levelMap() : void
{
}
}
}
import flash.display.Sprite;
internal class WallGraphics extends Sprite
{
public function WallGraphics()
{
name = "Wall";
with(graphics)
{
beginFill(0x0000FF, 1);
drawRect(100, 50, 60, 200);
drawRect(50, 100, 200, 50);
endFill();
}
}
}
internal class PositionMarker extends Sprite
{
public function PositionMarker(posX : Number, posY : Number, success : Boolean)
{
with(graphics)
{
beginFill((success) ? 0x00FF00 : 0xFF0000, 1);
drawCircle(posX, posY, 4);
endFill();
}
}
}
输出: