Lua 电晕控制器问题,can';t使对象加入控制器';s本地组

Lua 电晕控制器问题,can';t使对象加入控制器';s本地组,lua,coronasdk,Lua,Coronasdk,我在将游戏屏幕插入导演的本地组时遇到问题,导致导演每次在我的游戏开始时都会抱怨 我的代码: ---------------- --mainScreen.lua ---------------- -- --mainScreen.lua -- --The main screen for the game --set the background back to black module(...,package.seeall) local director = require("director")

我在将游戏屏幕插入导演的本地组时遇到问题,导致导演每次在我的游戏开始时都会抱怨

我的代码:

----------------
--mainScreen.lua
----------------

--
--mainScreen.lua
--
--The main screen for the game
--set the background back to black
module(...,package.seeall)
local director = require("director")
local localGroup

function new()
    localGroup = display.newGroup()
    local background = display.newRect(0,0,900,500)
    background:setFillColor(0,0,0)
    localGroup:insert(background)
    --we need a world
    local ourWorld = require("world")
    localGroup:insert(ourWorld)
    --need multitouch for the joystick
    system.activate( "multitouch" )
    --load joystick class
    local joystickClass = require("joystick")

    -- Add A New Joystick
    joystick = joystickClass.newJoystick{
        outerImage = "joystick_bottom.png",     -- Outer Image - Circular - Leave Empty For Default Vector
        outerAlpha = 0.7,                       -- Outer Alpha ( 0 - 1 )
        innerImage = "joystick_middle.png",     -- Inner Image - Circular - Leave Empty For Default Vector
        innerAlpha = 1.0,                       -- Inner Alpha ( 0 - 1 )
        position_x = 630,                       -- X Position Top - From Left Of Screen - Positions Outer Image
        position_y = 340,                       -- Y Position - From Left Of Screen - Positions Outer Image
        onMove = move                           -- Move Event
    }

    -- Print Output To Terminal
    local function move( event )
        if(event.joyX~=false and math.abs(event.joyX)>0.2) then
            ourWorld.moveleft(event.joyX*10)
        end
        if(event.joyY~=false and math.abs(event.joyY)>0.2) then
            if(event.joyY>0) then
                if(ourWorld.abletogodown()==true) then
                    ourWorld.moveup(event.joyY*10)
                end
            elseif(event.joyY<0) then
                ourWorld.moveup(event.joyY*10)
            end
        end
        --print( event.joyX , event.joyY , event.joyAngle , event.joyVector )
    end
    return localGroup
end

-------------
--world.lua--
-------------
--thanks to p120ph37
--http://developer.anscamobile.com/forum/2011/01/29/object-culling-render-process-when-not-content-area#comment-26658
--
--pull in our constant variables
module(..., package.seeall)
local const= require("constants")
require("tile")
require("sprite")
require("entity")
--need a player
player = entity.new(0,0,100,100,5)
player.settex(display.newImage("player.png",0,0))
--put the constants into local vairables
local TILE_WIDTH,TILE_HEIGHT,DEPTHX,DEPTHY,RUBYLIMIT,IRONLIMIT,SCREENWIDTH,SCREENHEIGHT = unpack(const,0,table.getn(const))
--define the elements
local IRON=0
local BRONZE=1
local COBALT=2
local STEEL=3
local RHODITE=4
local GOLD=5
local PLATNIUM=6
local IRIDIUM=7
local OPAL=8
local AMETHYST=9
local EMERALD=10
local RUBY=11
local SAPPHIRE=12
local TOPAZ=13
local DIAMOND=14
local OBSIDIAN=15
local DIRT=16
local SPACE=17
--tiles are 64x64 in 576x1216 image for 9x19=171 tiles
local map = display.newGroup()
local center = display.newGroup()
player_offsetx=player.getx()
player_offsety=player.gety()+60
print(player.gettex())
center:insert(player.gettex())
map.xTiles = 200
map.yTiles = 400
map.tiles = {} -- array to hold tile ids without actually creating display objects yet
map.tiles.health = {}
map.tileWidth = 40
map.tileHeight = 40
map.tileSheet = sprite.newSpriteSheet("tiles.png", map.tileWidth, map.tileHeight)
map.tileSet = sprite.newSpriteSet(map.tileSheet, 1, 18)
map.xTilesInView = math.ceil((display.viewableContentWidth - 1) / map.tileWidth) + 2
map.yTilesInView = math.ceil((display.viewableContentHeight - 1) / map.tileHeight) + 2
map.xScroll = 0
map.yScroll = 0

--populate the group with just enough objects to cover the entire screen
for y = 0, map.yTilesInView - 1 do
        for x = 0, map.xTilesInView - 1 do
                local tile = sprite.newSprite(map.tileSet)
                tile:setReferencePoint(display.TopLeftReferencePoint)
                tile.x = x * map.tileWidth
                tile.y = y * map.tileHeight
                tile.isVisible = false -- everything starts hidden
                map:insert(tile)
        end
end

-- iterate over the visible tiles with a callback
function map.forTilesInView(f)
        for y = 0, map.yTilesInView - 1 do
                for x = 0, map.xTilesInView - 1 do
                  local tx = math.floor(map.xScroll / map.tileWidth) + x;
                  local ty = math.floor(map.yScroll / map.tileHeight) + y;
                        f(map[map.xTilesInView * y + x + 1], tx, ty)
                end
        end
end

-- align and update the display object grid based on the current scroll position
function map.updateDisplay()
  -- align the display object grid
  map.x = -(map.xScroll % map.tileWidth)
  map.y = -(map.yScroll % map.tileHeight)

  -- update the tile contents
  map.forTilesInView(function(t, x, y)
    if(x >= 0 and x < map.xTiles and y >= 0 and y < map.yTiles) then
                        -- tile is inside the map
                        t.isVisible = true
                        t.currentFrame = map.tiles[y * map.xTiles + x + 1]
                else
                        -- tile is off the edge of the map
                        t.isVisible = false
                end
        end)
end

--init random function
math.randomseed(os.time())
math.random()        --bug in first use

function maybe(x)
    if(x<0 or x>100) then
        return false
    else
        if(x/5>=math.random(1,100)) then
            return true
        end
        return false
    end
end

function distribute(y)
    --this is for the int return
    local rtn=DIRT
    --start the cascade
    if y<10 then
        rtn = SPACE
    elseif y<30 then
        --3% chance of iron
        if maybe(8) then
            rtn=IRON
        end
        if maybe(5) then
            rtn=OPAL
        end
    elseif y<60 then
        if maybe(10) then
            rtn=IRON
        end
        if maybe(1) then
            rtn=OPAL
        end
        if maybe(1) then
            rtn=BRONZE
        end
    elseif y<90 then
        if maybe(10) then
            rtn=IRON
        end
        if maybe(10) then
            rtn=BRONZE
        end
        if maybe(5) then
            rtn=COBALT
        end
        if maybe(3) then
            rtn=OPAL
        end
    elseif y<120 then
        if maybe(20) then
            rtn=IRON
        end
        if maybe(20) then
            rtn=BRONZE
        end
        if maybe(10) then
            rtn=COBALT
        end
        if maybe(5) then
            rtn=OPAL
        end
        if maybe(1) then
            rtn=AMETHYST
        end
    elseif y<150 then
        if maybe(25) then
            rtn=IRON
        end
        if maybe(15) then
            rtn=COBALT
        end
        if maybe(8) then
            rtn=OPAL
        end
        if maybe(5) then
            rtn=AMETHYST
        end
        if maybe(3) then
            rtn=STEEL
        end
    elseif y<180 then
        if maybe(20) then
            rtn=COBALT
        end
        if maybe(10) then
            rtn=STEEL
        end
        if maybe(8) then
            rtn=AMETHYST
        end
        if maybe(1) then
            rtn=EMERALD
        end
        if maybe(1) then
            rtn=RUBY
        end
    elseif y<210 then
        if maybe(20) then
            rtn=STEEL
        end
        if maybe(5) then
            rtn=EMERALD
        end
        if maybe(5) then
            rtn=RUBY
        end
        if maybe(5) then
            rtn=RHODITE
        end
        if maybe(1) then
            rtn=SAPPHIRE
        end
    elseif y<240 then
        if maybe(15) then
            rtn=RHODITE
        end
        if maybe(6) then
            rtn=RUBY
        end
        if maybe(5) then
            rtn=SAPPHIRE
        end
        if maybe(2) then
            rtn=PLATNIUM
        end
        if maybe(1) then
            rtn=GOLD
        end
    elseif y<270 then
        if maybe(12) then
            rtn=GOLD
        end
        if maybe(10) then
            rtn=PLATNIUM
        end
        if maybe(1) then
            rtn=TOPAZ
        end
    elseif y<300 then
        if maybe(20) then
            rtn=GOLD
        end
        if maybe(15) then
            rtn=PLATNIUM
        end
        if maybe(5) then
            rtn=TOPAZ
        end
        if maybe(1) then
            rtn=DIAMOND
        end
    elseif y<330 then
        if maybe(10) then
            rtn=GOLD
        end
        if maybe(10) then
            rtn=PLATNIUM
        end
        if maybe(8) then
            rtn=IRIDIUM
        end
        if maybe(5) then
            rtn=DIAMOND
        end
        if maybe(2) then
            rtn=OBSIDIAN
        end
    elseif y<360 then
        if maybe(15) then
            rtn=DIAMOND
        end
        if maybe(15) then
            rtn=PLATNIUM
        end
        if maybe(10) then
            rtn=IRIDIUM
        end
        if maybe(5) then
            rtn=OBSIDIAN
        end
    else
        if maybe(25) then
            rtn=DIAMOND
        end
        if maybe(25) then
            rtn=PLATNIUM
        end
        if maybe(15) then
            rtn=IRIDIUM
        end
        if maybe(8) then
            rtn=OBSIDIAN
        end
    end
    --give back that number
    return rtn
end

local theNumber
local angles = {360,90,180,270}

--randomly populate tile ids (normally this data would be loaded from a file)
for y = 0, map.yTiles - 1 do
        for x = 0, map.xTiles - 1 do
          theNumber = distribute(y)+1
          map.tiles[#map.tiles + 1] = theNumber
          --map.tiles[#map.tiles + 1].tile.rotation = angles[math.random(4)]

        end
end

-- center the map and display the visible tiles
map.xScroll = 0
map.yScroll = 0
map.updateDisplay()

--move tile map
local prevX, prevY
function drag(event)
    if event.phase == "began" then
            prevX = event.x
            prevY = event.y
    elseif event.phase == "moved" then
            map.xScroll = map.xScroll + prevX - event.x
            map.yScroll = map.yScroll + prevY - event.y
            map.updateDisplay()
            prevX = event.x
            prevY = event.y
    end
end
--map:addEventListener("touch", drag)

function moveup(x)
    --if(map.tiles[math.floor(center.y+x/TILE_HEIGHT) * map.xTiles + math.floor(center.x/TILE_WIDTH)]==SPACE+1) then
    if(center.y>SCREENHEIGHT/2) then
        --player.sety(player.gety()+x)
        map.yScroll = map.yScroll + x
    elseif(center.y<SCREENHEIGHT/2) then
        center.y=center.y+x
    elseif(center.y>map.yTiles*map.tileHeight-(SCREENHEIGHT/2)) then
        center.y=SCREENHEIGHT/2+x
    end
    player_offsety = player_offsety + x
    --lets check if our tile is dirt
    if(tileon() == DIRT+1) then
        if(map.tiles[math.floor(player_offsety/TILE_HEIGHT) * map.xTiles + math.floor(player_offsetx/TILE_WIDTH)+1].health > 0) then
            map.tiles[math.floor(player_offsety/TILE_HEIGHT) * map.xTiles + math.floor(player_offsetx/TILE_WIDTH)+1].health = map.tiles[math.floor(player_offsety/TILE_HEIGHT) * map.xTiles + math.floor(player_offsetx/TILE_WIDTH)+1].health - 1
        else
            map.tiles[math.floor(player_offsety/TILE_HEIGHT) * map.xTiles + math.floor(player_offsetx/TILE_WIDTH)+1] = SPACE+1
        end
    end
    --else
        --print(map.tiles[math.floor(center.y/TILE_HEIGHT) * map.xTiles + math.floor(center.x/TILE_WIDTH)])
    --end
    map.updateDisplay()
end

function moveleft(x)
    if(center.x>SCREENWIDTH/2) then
        --player.setx(player.getx()+x)
        map.xScroll = map.xScroll + x
    elseif(center.x<SCREENWIDTH/2) then
        center.x=center.x+x
    elseif(center.x>map.xTiles*map.tileWidth-(SCREENWIDTH/2)) then
        center.x =SCREENWIDTH/2+x
    end
    player_offsetx = player_offsetx + x
    map.updateDisplay()
end

function abletogodown()
    --this should take some time
    if(tileon()==DIRT+1) then
        map.tiles[math.floor(player_offsety/TILE_HEIGHT) * map.xTiles + math.floor(player_offsetx/TILE_WIDTH)+1]=SPACE+1
        return true
    end
    return false
end

function tick()
    --make the player drop if he isn't on dirt.
    if(tileon()==SPACE+1) then
        if(center.y<SCREENWIDTH/2) then
            center.y = center.y + 10
        else
            map.yScroll=map.yScroll+10
        end
        player_offsety = player_offsety + 10
    end
    --if the player is digging down, account for it.
    --tileahead()
end
Runtime:addEventListener("enterFrame",tick)

--this function will get the tile the player is on
function tileon()
    return map.tiles[math.floor(player_offsety/TILE_HEIGHT) * map.xTiles + math.floor(player_offsetx/TILE_WIDTH)+1]
end

function tileahead()
    print(map.tiles[math.floor(player_offsety/TILE_HEIGHT) * map.xTiles + math.floor(player_offsetx/TILE_WIDTH)+1])
end
function tilebehind()
end

--[[ printing thing
for i=0,map.xTiles do
    for j=0,map.yTiles do
        print(map.tiles[j*map.xTiles+i])
    end
    print("\n")
end
--]]
----------------
--主屏幕
----------------
--
--主屏幕
--
--游戏的主屏幕
--将背景设置回黑色
模块(…,package.seeall)
本地董事=要求(“董事”)
本地本地组
函数new()
localGroup=display.newGroup()
本地背景=display.newRect(0,0900500)
背景:setFillColor(0,0,0)
本地组:插入(背景)
--我们需要一个世界
本地世界=需要(“世界”)
localGroup:insert(我们的世界)
--操纵杆需要多点触控
系统激活(“多点触控”)
--装载操纵杆类
本地操纵手柄类=需要(“操纵手柄”)
--添加一个新的操纵杆
操纵杆=操纵杆类别。新操纵杆{
outerImage=“mogage_bottom.png”,--外部图像-圆形-保留默认向量为空
外层α=0.7,--外层α(0-1)
innerImage=“mogage_middle.png”,--内部图像-圆形-默认向量留空
内α=1.0,--内α(0-1)
位置x=630,-x位置顶部-屏幕左侧-位置外部图像
位置y=340,-y位置-从屏幕左侧-定位外部图像
onMove=move--move事件
}
--打印输出到终端
本地功能移动(事件)
如果(event.joyX~=false和math.abs(event.joyX)>0.2),那么
我们的世界。向左移动(event.joyX*10)
终止
如果(event.joyY~=false和math.abs(event.joyY)>0.2),那么
如果(event.joyY>0),则
如果(ourWorld.abletogodown()==true),那么
我们的世界。移动(事件。乔伊*10)
终止
elseif(event.joyY=0,x=0,y=math.random(1100)),那么
返回真值
终止
返回错误
终止
终止
功能分配(y)
--这是用于int返回的
局部rtn=污垢
--启动级联

如果y我不确定,但我认为不应该将world插入到一个组中,因为它是另一个lua文件。我认为world.lua中的所有对象也必须单独插入到组中。当然,这是我的猜测