2017-06-29 69 views
0

爲什麼我檢查分數值時我的代碼不工作?我一直試圖解決這個問題很長一段時間,但沒有任何工作。爲什麼scoreTxt更新但if函數沒有做任何事情?如何更新corona SDK中的值?

local function myTouchListener(event) 
    if (event.phase == "began") then 
     transition.pause() 
     score = score +1 
     scoreTxt.text = score 
    end 
end 


local ball = display.newCircle(0,0,40) 
     ball:addEventListener("touch",myTouchListener) 




if(score > 2)then 
    ball.x = display.contentCenterX 
    --NOTHING HAPPENS HERE 
end 

回答

2

首先,沒有「if功能」這樣的東西。

假設您提供的代碼只會在您的if語句僅被評估一次時執行。因爲如果發生這種情況,評分很可能不會> 2,所以if語句主體根本就不會被評估。這就是爲什麼沒有發生。

當你的代碼被執行時,你定義了一個函數myTouchListener。然後你創建一個圓並添加myTouchListener函數作爲它的事件監聽器。

然後你評估if語句。

您應該將ball.x分配移動到myTouchListener,以便每次更改分數時對其進行評估。

想一想。爲什麼應該再次評估if語句?誰會觸發這個,爲什麼?

+0

什麼會再次觸發if語句?一個循環的某種?我試圖把if語句放在函數中,但它沒有很好地發揮作用。 –

+0

@E先生,上帝的名字是什麼「沒有很好地工作」應該是什麼意思? – Piglet

+0

當我更改並將if語句放在eventListener中後,我做到了這一點,如果分數高於2,函數就會開始,其中背景會從黑色反覆變爲白色。現在,每當我按下屏幕時,背景變化的功能都會重新開始。有沒有辦法來檢查一個函數是否正在執行以及它是否完成? –

1

這應該解決這一問題:

local score = 0 
local function myTouchListener(event) 
if (event.phase == "began") then 
    transition.pause() 
    score = score +1 
    scoreTxt.text = score 

    if(score > 2)then 
     ball.x = display.contentCenterX 
    end 
end 
end 
local ball = display.newCircle(0,0,40) 
ball:addEventListener("touch",myTouchListener) 

您遇到的問題是,如果語句正在發生一次,得分爲0或空。您需要檢查每次觸摸發生後得分> 2,而不是隻在程序第一次運行時進行一次。

你也不能只讓score = score + 1,因爲如果你沒有初始化它,score實際上等於null。所以null = null + 1沒有任何意義。