我目前正在使用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
怪物刚刚停留在产卵点并停留在那里。
但是,当我评论这三行代码时:
--local bg = display.newImage ("image/levels/1/bg.png");
--bg.x = _W/2;bg.y = _H/2;
--bg:toBack();
问题消失了
任何想法?感谢您的帮助
答案 0 :(得分: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)
答案 1 :(得分:0)
在Corona SDK的更新版本中:
Composer是Corona SDK中的官方场景(屏幕)创建和管理库.... Composer库中的主要对象是
scene
对象...它包含一个唯一的self.view
....这个self.view
是你应该插入与场景有关的视觉元素的地方。
现在在scene:create()
方法中,您应该将所有DisplayObject插入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
此sceneGroup
中的DisplayObjects分层取决于它们添加到组中的顺序,最后添加的对象位于顶部。您可以使用toBack()
和toFront()
方法控制此排序。