跳转到内容

创建简单的计分系统

💡 Scratch 积木拼接遇到困难?代码逻辑不知道怎么实现? 🚀 立即获得帮助

GM

GameMaker456

Posted on January 20, 2024 • Intermediate

🎮 需要计分系统的帮助

大家好!我正在 Scratch 中制作我的第一个游戏,玩家需要收集金币并击败敌人。我想添加一个计分系统:

  • 收集金币时增加分数
  • 击败敌人时获得分数
  • 在屏幕上显示分数

我对变量和游戏机制还比较陌生。任何帮助都将不胜感激!🙏

SC

ScratchCoder_Pro

Replied 2 hours later • ⭐ Best Answer

很好的问题 @GameMaker456!计分系统实现起来非常有趣。这里是一个分步指南,应该能帮到你:

🔧 步骤 1:创建分数变量

首先,创建一个名为 Score 的变量,确保设置为”适用于所有角色”,这样在任何地方都能访问。

    when flag clicked
set [Score v] to [0]
  

💰 步骤 2:金币收集系统

对于你的金币角色,添加这段代码:

    when flag clicked
forever
if <touching [Player v]?> then
change [Score v] by [10]
play sound [coin collect v]
hide
stop [this script v]
end
end
  

⚔️ 步骤 3:敌人击败系统

当敌人角色被击败时:

    // When enemy is defeated (example: when touched by player's attack)
when I receive [enemy defeated v]
change [Score v] by [50]
play sound [enemy defeat v]
hide
  

📺 步骤 4:分数显示

创建一个文本角色或使用内置的变量显示:

选项 A:内置变量显示

  • 在变量面板中右键点击 Score 变量
  • 选择”显示”在舞台上显示它
  • 你可以拖拽它到想要的位置

选项 B:自定义分数显示
创建一个文本角色并添加这段代码:

    when flag clicked
forever
set [text v] to (join [Score: ] (Score))
go to x: [-200] y: [150]
end
  

🚀 步骤 5:高级功能(可选)

如果你想要更炫酷的效果,这里有一些很棒的补充:

连击系统:

    // Add combo multiplier
when flag clicked
set [Combo v] to [1]
set [Combo Timer v] to [0]

forever
if <(Combo Timer) > [0]> then
change [Combo Timer v] by [-1]
else
set [Combo v] to [1]
end
end

// When collecting items
when I receive [item collected v]
change [Score v] by ((base points) * (Combo))
change [Combo v] by [1]
set [Combo Timer v] to [180] // 3 seconds at 60 FPS
  

最高分系统:

    when flag clicked
if <(Score) > (High Score)> then
set [High Score v] to (Score)
broadcast [new high score v]
end
  

希望这能帮到你!如果有任何部分需要澄清,请告诉我!😊

GM

GameMaker456

Replied 30 minutes later

@ScratchCoder_Pro 这太棒了!非常感谢!🎉

我已经让基本的计分系统完美运行了。有一个小问题 - 如何让分数显示看起来更好看?现在它只显示原始数字。

UI

UIDesigner_Sarah

Replied 1 hour later

@GameMaker456 很好的问题!这里是如何优雅地格式化大数字:

    // Custom block: format score
define format score (number)
if <(number) > [999999]> then
set [formatted score v] to (join (round ((number) / [1000000])) [M])
else
if <(number) > [999]> then
set [formatted score v] to (join (round ((number) / [1000])) [K])
else
set [formatted score v] to (number)
end
end
  

这将显示 “1.2K” 而不是 “1200”,显示 “2.5M” 而不是 “2500000”。更加简洁!✨

GT

GameTutor_Mike

Replied 2 hours later

很高兴看到初学者挑战游戏机制!🎮 这里有一些专业技巧让你的计分系统更棒:

  • 不同分值:根据收集难度给不同物品设置不同分值
  • 奖励计分:添加时间奖励或完美完成奖励
  • 分数反馈:获得分数时显示浮动文字
  • 保存最高分:使用云变量在线保存最高分

继续实验并享受其中的乐趣!

VB

Vibelf_Community

Pinned Message • Moderator

🚀 想要提升你的游戏开发技能?

大家讨论得很棒!对于那些想要创建更高级计分系统的人,我们的社区可以帮助你实现:

  • 🏆 排行榜
  • 🎖️ 成就系统
  • 🧮 复杂计分算法
  • 🔓 基于分数的解锁内容

📚 相关讨论

准备好将你的游戏开发技能提升到新水平了吗?在 Vibelf 应用中获得我们专家导师的个性化指导!