在 corona 中,提示用户在游戏中间回答某些问题。

有办法在游戏进行中或用户赢/输游戏后询问用户问题吗?以下代码是我写的用于征求玩家同意的代码,我稍微改了一下。不过我不确定应该如何更改它,而且我还想将响应作为一封电子邮件发送给自己。

--向用户提出问题,响应将打印在模拟器输出中并通过电子邮件发送给我
local alert = native.showAlert("问题", "控制难以掌握吗?", { "是", "否" }, gameFun)
local function gameFun(event)
    print("用户的决定是 " .. event.index .. " 用户回答了问题 " .. event.action)

    local action = event.action
    if "clicked" == event.action then
        if 2 == event.index then

        end
    elseif "cancelled" == event.action then
        --我们的取消警报定时器函数解除了警报,因此不做任何处理
    end
end

好的,我现在已经稍微改变了我的代码,我认为我只能使用一个警报框,因此我已经这样做了:

function gameFun()
    balloonText.isVisible = false
    balloonTextt.isVisible = false
    balloonTexttt.isVisible = false
    questionText.isVisible = false
    askUser = display.newText(
        '炮弹难以使用吗?请用1-5的评分进行评价(5最好)',
        display.contentCenterX,
        display.contentWidth / 4,
        native.systemFont, 20 )
    askUser:setFillColor(135, 75, 44)
    yesBtn = display.newImage("Yes.png",120,290)
    noBtn = display.newImage("No.png",190,290)
end

function gameFunListener(action)
    if (action=='add') then
        yesBtn:addEventListener('tap', sendMail())
        noBtn:addEventListener('tap', sendMail())
    else
        yesBtn:removeEventListener('tap', sendMail())
        noBtn:removeEventListener('tap', sendMail())
    end
end

我创建了一个新的函数,它将询问用户一个问题,如果用户按下是或否,他们将进入电子邮件选项,在那里他们可以发送电子邮件告诉我。但是出于某种原因,按钮不起作用,而是跳转到编写电子邮件。

点赞
用户869951
用户869951

在游戏中的某个地方(比如一个 enterFrame 事件处理程序或其他事件处理程序),你的游戏会确定用户已经赢了或输了。这就是你调用 askQuestion()(或 survey)函数的地方。有很多方法可以做到这一点,但基本上

  • 如果你正在使用 storyboard,则可以将问题作为新场景进行转换(currentScene.gotoScene(“newscene”));
  • 否则(没有 storyboard),你可以将一些可见的显示对象设为不可见,实例化一些问题小部件(问题的文本,答案的按钮等),并将其可见化

当最后一个问题回答完毕后,你要将视图恢复到问题之前的状态(或显示“游戏结束”页面等)。Corona,像其他GUI一样,基于由用户动作(按下按钮,输入文本,将对象移动到与另一个对象碰撞等)和系统事件(enterFrame,方向,暂停/恢复等)引起的事件,因此引起问题显示的触发器位于其中一个事件处理程序中。

例如:

function gameFun()
    balloonText.isVisible = false
    ...
    askUser = display.newText(
        'Is the cannon hard to use? Rate it at a scale of 1-5(5 the best)',
        display.contentCenterX,
        display.contentWidth / 4,
        native.systemFont, 20 )
    askUser:setFillColor(135, 75, 44)
    yesBtn = display.newImage("Yes.png",120,290)
    noBtn = display.newImage("No.png",190,290)
    yesBtn:addEventListener ('tap', processAnswer)
    noBtn:addEventListener ('tap', processAnswer)
end

function processAnswer(event)
    if event.target == noBtn then
        ...
    else
        ...
    end
    sendMail()
    askUser.isVisible = false
    yesBtn.isVisible = false
    ...
    yesBtn:removeEventListener ('tap', processAnswer)
    noBtn:removeEventListener ('tap', processAnswer)
end

请注意,当你注册一个侦听器时,你不能调用你注册的函数(函数名后面没有 () )!此外,如果你在 gameFun 中创建你的问题显示对象,然后只在 processAnswer 中切换其可见性,则不需要担心 removeEventListener:它们仅在可见时响应 tap。

2014-03-01 21:52:18