在giderous工作室使用计时器和电影剪辑时的奇怪情况

时间:2012-09-28 15:50:49

标签: lua gideros

我目前正在使用giderous工作室制作塔防游戏。但是代码没有按预期运行。

我做了一个函数,让游戏中的怪物按照JSON文件中的路径移动。移动过程顺利,除了第一个生成火焰的怪物,我绝对不知道为什么怪物停在路上。 (如图所示) enter image description here

以下是我的代码:

level.lua:

    level = Core.class(Sprite)

function level:init(levelId)
    local level = dataSaver.load("level");

    --load attributes
    self.lives=level[tostring(levelId)]["lives"];
    self.route=level[tostring(levelId)]["route"];
    self.round=level[tostring(levelId)]["rounds"];
    self.towersAllowed=level[tostring(levelId)]["towers"];

    --some varibles
    self.currentRound=1;
    self.monsterList={};
end

function level:spawnMonster()
    local monsterType=self.round[1]["type"];
    local spawnNumber=self.round[1]["number"];

    --set timer for spawn
    local timer = Timer.new(self.round[1]["spawnInterval"],0);--spawnNumber);
    timer:start();

    --spawn
    timer:addEventListener(Event.TIMER,function()
        local spawnedMonster = monster.new(monsterType);
        spawnedMonster.instance:setPosition(self.route[1]["x"],self.route[1]["y"]);
        self:moveMonster(spawnedMonster);
    end);

    --after spawn finished, wait for next round.
    timer:addEventListener(Event.TIMER_COMPLETE,function()
        local nextRound = Timer.new(self.round[1]["timeUntilNextRound"],1);
        nextRound:start();
        nextRound:addEventListener(Event.TIMER_COMPLETE,function()
            print("nextRound");
        end);
    end);
end

function level:moveMonster(monsterToMove)
    if  (monsterToMove.currentDes<=#self.route) then
        monsterToMove:move(self.route[monsterToMove.currentDes]["x"],self.route[monsterToMove.currentDes]["y"]);
        monsterToMove:addEventListener("monsterMoveDone",function()
            monsterToMove.currentDes=monsterToMove.currentDes+1;
            self:moveMonster(monsterToMove);
        end);
    end
end

monster.lua:

monster = Core.class(Sprite)

function monster:init(type)
    local monstersList = dataSaver.load("monster");
    self.instance = quickImage(monstersList[type]["image"], _W/2, _H/2,monstersList[type]["width"], monstersList[type]["height"]);
    self.speed=monstersList[type]["speed"];
    self.health=monstersList[type]["health"];
    stage:addChild(self.instance);

    ---some varibles...
    self.currentDes=2
end

function monster:move(desX,desY)
    local time=getDistance(math.abs(self.instance:getX()-desX),math.abs(self.instance:getY()-desY))/self.speed
    local mc = MovieClip.new{
        {1, time, self.instance, {x = {self.instance:getX(), desX, "linear"}}},
        {1, time, self.instance, {y = {self.instance:getY(), desY, "linear"}}},
    }
    mc:addEventListener(Event.COMPLETE,function()
        self:dispatchEvent(Event.new("monsterMoveDone"))   
    end);
end

来自代码,quickImage();只是制作图像精灵的一个小功能 任何想法,我想也许我会让内存分配错误。

特别说明。我使用Wine在OpenSUSE 12.2下运行Gideros Studio,但我不认为这是因为所有东西都很顺利。

0 个答案:

没有答案