这可能不应该在这里提出一个愚蠢的问题,但我找不到任何可以帮助我的东西,所以无论如何,我已经创建了一个快速碰撞系统,我做了它,所以你可以使用1碰撞多个形状使用数组的一堆if语句。现在,我不是定义每个墙并创建它们,而是尝试使用循环。它创建了它们,但我不知道它是否只创建了1个或更多,所以我尝试在每个墙之间留一个间隙,但它似乎只是移动所有它们(假设它不止一个)。
代码:
for (var i:int = 1; i < 3; i++)
{
var MyWall = new Sprite();
MyWall.graphics.beginFill(0xAABBCC)
MyWall.graphics.drawRect(100*i+201, 30, 200, 125)
MyWall.graphics.endFill();
WallsList.push(MyWall)
addChild(MyWall)
}
答案 0 :(得分:1)
如果你画那样,那么所有墙都会有共同的坐标和变换矩阵,但看起来不同。大多数情况下这不是必需的,只会增加你的困惑。相反,它们需要以相同的方式绘制,然后放置在正确的位置,以便绘制相同的图形:
var xpos:Number = 0;
var ypos:Number = 30;
for (var i:int = 0; i < 2; i++)
{
var wall:Sprite = new Sprite();
wall.graphics.beginFill(0xAABBCC)
wall.graphics.drawRect(0, 0, 200, 125)
wall.graphics.endFill();
WallsList.push(wall)
addChild(wall)
wall.y = ypos;
xpos += i * 100;
wall.x = 201 + xpos;
}
答案 1 :(得分:1)
我的猜测是:
而不是代码:
MyWall.graphics.drawRect(100*i+201, 30, 200, 125)
尝试下一个:
MyWall.graphics.drawRect(100+201*i, 30, 200, 125)
答案 2 :(得分:1)
您的代码有一个简单的问题:您绘制的矩形相互重叠。
Rect 1是301x30,它是200x125(即x = 501结束) 矩形2在401x30,它是200x125(即在x = 601处结束)。
如果你改变颜色,你会立即看到这个:
var colours = [0xAABBCC, 0xFF0000];
for (var i:int = 1; i < 3; i++)
{
var MyWall = new Sprite();
MyWall.graphics.beginFill(colours[i-1])
MyWall.graphics.drawRect(100*i+201, 30, 200, 125)
MyWall.graphics.endFill();
addChild(MyWall)
}
你可以通过制作更窄的墙来解决这个问题:
var colours = [0xAABBCC, 0xFF0000];
for (var i:int = 1; i < 3; i++)
{
var MyWall = new Sprite();
MyWall.graphics.beginFill(colours[i-1])
MyWall.graphics.drawRect(100*i+201, 30, 50, 125)
MyWall.graphics.endFill();
addChild(MyWall)
}
或将它们分开:
var colours = [0xAABBCC, 0xFF0000];
for (var i:int = 1; i < 3; i++)
{
var MyWall = new Sprite();
MyWall.graphics.beginFill(colours[i-1])
MyWall.graphics.drawRect(250*i, 30, 200, 125)
MyWall.graphics.endFill();
addChild(MyWall)
}
编辑:正如@BotMaster正确指出的那样,此解决方案无法正确处理碰撞检测。你的墙都在x = 0,y = 0,高度= 155。对于“将它们间隔得更远”的代码块,第一个墙将具有宽度= 450,第二个墙将具有宽度= 700 - 对象将检测看起来像空空间的碰撞。