在使用循环AS3创建的形状中创建间隙

时间:2015-11-18 17:50:04

标签: actionscript-3

这可能不应该在这里提出一个愚蠢的问题,但我找不到任何可以帮助我的东西,所以无论如何,我已经创建了一个快速碰撞系统,我做了它,所以你可以使用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)
    }

3 个答案:

答案 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 - 对象将检测看起来像空空间的碰撞。