在 Scratch 中,我有一個變數應該在每次接收到廣播時改變一個,但是在測驗它每次廣播改變三個,我找不到原因。用于發送廣播的按鈕有 3 個克隆,但每個都有不同的功能,發送廣播取決于設定為“戰斗”的“按鈕選擇”變數,所以不要認為這會影響結果。
我查看了所有代碼,它沒有重復,沒有其他任何東西改變變數,并且廣播一次只發送一次。如果我單擊塊來自己運行它們,它甚至可以很好地作業,但是當它作為游戲中的功能執行時,它會將它更改為三個,我不明白為什么。
更改變數的代碼是:
When I recieve "attack"
Change "attacktimes" by 1
發送廣播的代碼是這樣的:
When key "z" pressed
if "enemy turn" = "0"
if "button type" = "fight"
broadcast "fight"
有人知道解決方案嗎?
這里也是共享專案,雖然它不完整。
我的專案
說明中列出了重新創建錯誤的步驟
uj5u.com熱心網友回復:
廣播是一種強大的機制,但它們很難控制,尤其是在使用克隆的專案中。
我查看了所有代碼,但沒有重復
那是無關緊要的。名副其實:廣播無處不在。查看(靜態)代碼時可能看起來像單個操作的操作,可能會在運行時向各個方向爆炸。
通常,在克隆具有“當我收到”訊息處理程式的精靈時要非常小心。將為每個克隆以及原始精靈觸發訊息處理程式。
在您的情況下,精靈 'Error404 Sans' 有兩個克隆。加上原來的精靈,一共是三個物件。當訊息“攻擊”進入時,將為三個物件中的每一個執行“當我收到攻擊時”腳本。由于變數 'AttackTimes' 是一個全域變數,它會增加 3 倍。
那么如何解決這個問題呢?在這種情況下,最簡單的方法是將整個“當我收到攻擊”腳本移動到舞臺、虛擬精靈或任何其他未克隆的精靈。一個由三部分組成的 Sans 精靈很可愛,讓他看起來“會呼吸”。但這對精靈來說已經是很大的責任了;更好地在其他地方實施“攻擊”部分。否則,你會發現自己被 Sans 的頭部、軀干和腿部單獨攻擊。
一個更笨拙的解決方案是使用“if-then”塊來確保只有一個特定的克隆將繼續進行攻擊。對于“if”條件,您將需要一個“for this sprite only”變數或任何其他特定于克隆的變數(例如位置、服裝名稱)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/469296.html
標籤:变量 mit-scratch
