使用Corona sdk触摸Sprite的Grid(2D-Array) [英] touchEvent for Grid(2D-Array)of Sprites using Corona sdk

查看:154
本文介绍了使用Corona sdk触摸Sprite的Grid(2D-Array)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在2D数组中有一个动画精灵网格,但是当为sprite对象放置eventListener时,它显示以下错误Director ERROR:无法加载模块游戏 - 请检查文件是否存在,这是正确的,当我删除代码触摸下一个场景弹出一个网格动画火球(这是很好的),但我想实现的触发事件在网格中的个别精灵。请帮帮我。感谢



这里是代码:



模块(...,package.seeall)
function new()

  local localGroup = display.newGroup()

local gamebg = display.newImageRect (gameBG.png,_W,_H)
gamebg:setReferencePoint(display.centerReferencePoint)
gamebg.x = _W / 2
gamebg.y = _H / 2
swapButton = {} --A 2D数组
本地实例= {}

需要精灵


本地tempX = 130
本地tempY = 60

for i = 0,6,1 do
swapButton [i] = {}
instance [i] = {}

对于j = 0,6,1 do
instance [i] [j] = sprite.newSprite(sprite.newSpriteSet(sprite.newSpriteSheet(fireBall.png,36,36),1,40))
instance [i] [j] .x = tempX
instance [i] [j] .y = tempY
instance [i] [j]:prepare()
instance [ i] [j]:play()

instance [i] [j]:addEventListener(touch,myTouchListener)
swapButton [i] [j] = display.newImage circle.png,40,40)
swapButton [i] [j] .x = tempX
swapButton [i] [j] .y = tempY
tempX = tempX + 40


end
tempX = 130
tempY = tempY + 40
end

function myTouchListener:touch(event)
如果event.phase ==开始
display.getCurrentStage():setFocus(event.target);
print(display.getCurrentStage())
elseif event.phase ==移动然后
print(moved)
elseif event.phase ==结束
display.getCurrentStage():setFocus(nil);
end



localGroup:insert(gamebg)


返回localGroup

结束



谢谢



-Hemanth

解决方案

你没有为你的听众提供一个结束语句,它的实现本身就是iffy,因为你没有声明myTouchListener。尝试以下内容:

  module(...,package.seeall)
function new()

local localGroup = display.newGroup()

本地gamebg = display.newImageRect(gameBG.png,_ W,_H)
gamebg:setReferencePoint(display.centerReferencePoint)
gamebg.x = _W / 2
gamebg.y = _H / 2
swapButton = {} - 一个2D数组
本地实例= {}

需要精灵


本地tempX = 130
本地tempY = 60

为i = 0,6,1 $ do
swapButton [i] = {}
instance [i] = {}

for j = 0,6,1 do
instance [i] [j] = sprite.newSprite (sprite.newSpriteSet(sprite.newSpriteSheet(fireBall.png,36,36),1,40))
instance [i] [j] .x = tempX
instance [i] [j ] .y = tempY
instance [i] [j]:prepare()
instance [i] [j]:play()

函数myTouchListener(event)
如果event.phase ==开始那么
display.getCurrentStage():setFocus(event.target);
print(display.getCurrentStage())
elseif event.phase ==移动然后
print(moved)
elseif event.phase ==结束
display.getCurrentStage():setFocus(nil);
end
end

instance [i] [j]:addEventListener(touch,myTouchListener)
swapButton [i] [j] = display.newImage circle.png,40,40)
swapButton [i] [j] .x = tempX
swapButton [i] [j] .y = tempY
tempX = tempX + 40
end
tempX = 130
tempY = tempY + 40
end

localGroup:insert(gamebg)


return localGroup
end


I have a grid of animated sprites in an 2D-Array, but when put the eventListener for a sprite object it is showing the following error "Director ERROR: Failed to load module 'game' - Please check if the file exists and it is correct.", when I remove the code for touch the next scene pops up with animated fireballs in a grid(which is nice), but I wanted to implement touchevents for the individual sprites in the grid. Please help me. Thanks

Here Is the Code:

module(..., package.seeall) function new()

local localGroup = display.newGroup()

local gamebg=display.newImageRect("gameBG.png",_W,_H)
gamebg:setReferencePoint(display.centerReferencePoint)
gamebg.x=_W/2
gamebg.y=_H/2
swapButton = {} --A 2D Array
local instance = {}

require "sprite"


local tempX=130
local tempY=60

for i = 0, 6, 1 do
    swapButton[i]={}
    instance[i]={}

    for j=0,6,1 do      
        instance[i][j]=sprite.newSprite(sprite.newSpriteSet(sprite.newSpriteSheet("fireBall.png",36,36),1,40))
        instance[i][j].x=tempX
        instance[i][j].y=tempY
        instance[i][j]:prepare()
        instance[i][j]:play()

        instance[i][j]:addEventListener("touch",myTouchListener)
        swapButton[i][j]= display.newImage("circle.png",40,40)
        swapButton[i][j].x=tempX
        swapButton[i][j].y=tempY
        tempX=tempX+40


    end
    tempX=130
    tempY=tempY+40
end

function myTouchListener:touch(event)
if event.phase == "began" then
    display.getCurrentStage( ):setFocus( event.target );
    print(display.getCurrentStage( ))
 elseif event.phase=="moved" then
 print("moved")   
elseif event.phase == "ended" then
    display.getCurrentStage( ):setFocus( nil );
end



localGroup:insert(gamebg)


return localGroup

end

thanks

-Hemanth

解决方案

You're missing an end statement for your listener and it's implementation itself is iffy because you didn't declare myTouchListener. Try the following:

module(..., package.seeall)
function new()

    local localGroup = display.newGroup()

    local gamebg=display.newImageRect("gameBG.png",_W,_H)
    gamebg:setReferencePoint(display.centerReferencePoint)
    gamebg.x=_W/2
    gamebg.y=_H/2
    swapButton = {} --A 2D Array
    local instance = {}

    require "sprite"


    local tempX=130
    local tempY=60

    for i = 0, 6, 1 do
        swapButton[i]={}
        instance[i]={}

        for j=0,6,1 do
            instance[i][j]=sprite.newSprite(sprite.newSpriteSet(sprite.newSpriteSheet("fireBall.png",36,36),1,40))
            instance[i][j].x=tempX
            instance[i][j].y=tempY
            instance[i][j]:prepare()
            instance[i][j]:play()

            function myTouchListener(event)
                if event.phase == "began" then
                    display.getCurrentStage( ):setFocus( event.target );
                    print(display.getCurrentStage( ))
                elseif event.phase=="moved" then
                    print("moved")
                elseif event.phase == "ended" then
                    display.getCurrentStage( ):setFocus( nil );
                end
            end

            instance[i][j]:addEventListener("touch",myTouchListener)
            swapButton[i][j]= display.newImage("circle.png",40,40)
            swapButton[i][j].x=tempX
            swapButton[i][j].y=tempY
            tempX=tempX+40
        end
        tempX=130
        tempY=tempY+40
    end

    localGroup:insert(gamebg)


    return localGroup
end

这篇关于使用Corona sdk触摸Sprite的Grid(2D-Array)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆