Flash拖放游戏

时间:2019-03-13 10:28:23

标签: actionscript-3 flash

我正在做一个Flash迷你游戏,角色需要抓住物品从上到下的下落。 我面临的问题是将计时器用于随机选择的数组中的这6个项目,并使用随机x轴下拉列表。

var PointFood:Array = [Melon1,Honey1,Worm1,Clock1,Poison1,Sling1];
//this is the array of items to drop
time = new Timer(60);
//No idea the timer is with frame or second
time.addEventListener(TimerEvent.TIMER,GenerateItem);
time.start();
function GenerateItem(event:TimerEvent):void
{
axis = Math.round(Math.random()*709.7)+44.45;
//this is the random x axis with my scene width
PointFood[i].x = axis;
PointFood[i].y = 0;
    if(PointFood[i].y < 600.95)
    {
      PointFood[i].y += 10;
    }
}
//here assign the x and y axis
function ItemType(e:Event):Number
{
    i = Math.round(Math.random()*5);
    return i;
}
//this is the random for item in array

但是,一旦计算完成,x轴将不断变化。即使屏幕上已经存在的项目,其x轴也会随着计算而不断变化。 有什么解决办法吗?

1 个答案:

答案 0 :(得分:2)

有不同的处理方式。 我假设 Melon1 Honey1 ,...是您自己的类的实例。 向其中每个添加位置的公共财产,例如:

public var positioned:Boolean=false;

目前,您的 ItemType 函数仅根据 PointFood 数组中对象的数量返回一个随机整数。 让我们集成一个检查,以确定是否已经使用随机添加的定位属性来定位随机对象:

function ItemType(e:Event):Number
        {
            var found:Boolean;

            do
            {
                found = true;
                i = Math.round(Math.random() * 5);
                if (PointFood[i].positioned)
                {
                    found = false;
                }
            } while (!found);

            return i;
        }

最后修改 GenerateItem 函数以考虑 positioned 属性-因此,如果位置为 false ,则只需随机放置该位置即可:

        function GenerateItem(event:TimerEvent):void
        {
            if (PointFood[i].positioned == false)
            {
            axis = Math.round(Math.random() * 709.7) + 44.45;
//this is the random x axis with my scene width
                PointFood[i].positioned = true;
                PointFood[i].x = axis;
                PointFood[i].y = 0;
            }
                if (PointFood[i].y < 600.95)
                {
                    PointFood[i].y += 10;
                }
        }

作为旁注:

time = new Timer(60);

表示您的计时器每60毫秒触发一次-这是预期的行为吗? 另外,您的代码可能存在一些逻辑问题。就像名称GenerateItem所暗示的那样,我想这个函数应该只是产生一个新对象并初始化它的位置。不幸的是,您似乎也正在滥用此功能来执行主游戏循环。我建议将其分为两个单独的功能。