2

我目前正在使用 Corona SDK 制作塔防游戏。然而,当我制作游戏场景时,背景场景总是覆盖怪物产卵,我试过background:toBack()了,但它不起作用。这是我的代码:

module(..., package.seeall)

function new()
    local localGroup = display.newGroup();

    local level=require(data.levelSelected);

    local currentDes = 1;

    monsters_list = display.newGroup()

    --The background
    local bg = display.newImage ("image/levels/1/bg.png");
    bg.x = _W/2;bg.y = _H/2;
    bg:toBack();

    --generate the monsters
    function spawn_monster(kind)
        local monster=require("monsters."..kind);
        newMonster=monster.new()
        --read the spawn(starting point) in level, and spawn the monster there
        newMonster.x=level.route[1][1];newMonster.y=level.route[1][2];
        monsters_list:insert(newMonster);
        localGroup:insert(monsters_list);
        return monsters_list;
    end

    function move(monster,x,y)
        -- Using pythagoras to calauate the moving distace, Hence calauate the time consumed according to speed
        transition.to(monster,{time=math.sqrt(math.abs(monster.x-x)^2+math.abs(monster.y-y)^2)/(monster.speed/30),x=x, y=y, onComplete=newDes})
    end

    function newDes()
        currentDes=currentDes+1;
    end

    --moake monster move according to the route
    function move_monster()
        for i=1,monsters_list.numChildren do
            move(monsters_list[i],200,200);
            print (currentDes);
        end 

    end

    function agent()
        spawn_monster("basic");
    end

    --Excute function above.
    timer2 = timer.performWithDelay(1000,agent,10);
    timer.performWithDelay(100,move_monster,-1);
        timer.performWithDelay(10,update,-1);
    move_monster();

    return localGroup;
end

怪物只是停留在生成点并停留在那里。 在此处输入图像描述

但是,当我评论这 3 行代码时:

--local bg = display.newImage ("image/levels/1/bg.png");
--bg.x = _W/2;bg.y = _H/2;
--bg:toBack();

问题消失 在此处输入图像描述

有什么想法吗?谢谢你的帮助

4

2 回答 2

8

由于您使用的是director,您应该将所有显示对象插入localGroup。您尚未将 bg 插入 localGroup。

SO director 类在插入 localGroup 后最后插入 bg。

将您的代码修改为

    --The background

    local bg = display.newImage (localGroup,"image/levels/1/bg.png");
    bg.x = _W/2;bg.y = _H/2;
    bg:toBack();

或添加代码

 localGroup:insert(bg)
于 2012-07-08T10:45:56.193 回答
0

在最新版本的 Corona SDK 中:

Composer 是 Corona SDK 中的官方场景(屏幕)创建和管理库...... Composer 库中的主要对象是scene对象......它包含一个独特的self.view......这self.view是您应该插入相关视觉元素的地方到现场。

所以现在在你的scene:create()方法中,你应该将所有 DisplayObjects 插入到self.view. 它看起来像这样:

local composer = require( "composer" )
local scene = composer.newScene()

function scene:create()

    local sceneGroup = self.view

    local bg = display.newImage( ...
    bg.x, bg.y = ...

    local dude = display.newImage( ...
    dude.x, dude.y = ....

    sceneGroup:insert(bg)
    sceneGroup:insert(dude)

end

其中 DisplayObject 的分层sceneGroup取决于它们添加到组中的顺序,最后添加的对象在顶部。toBack()您可以使用和toFront()方法控制此排序。

于 2017-03-23T12:39:01.957 回答