目前,当获得积分时,X点数会立即更新:
/****************************** Platform Collision ***************************/voID OnCollisionEnter2D(Collision2D coll) { foreach(ContactPoint2D contact in coll.contacts) { newPlayerHeight = transform.position.y; // Don't count the first jump if(newPlayerHeight < 0){ newPlayerHeight = 0; } // If the player jumps down,don't reduce points // Add a tolerance for variable collision positions on same platform if(newPlayerHeight < oldplayerHeight + -0.05f){ newPlayerHeight = oldplayerHeight; } // Send the height to the score class score.SP.updatescore(newPlayerHeight); oldplayerHeight = newPlayerHeight; } }/******************************* score class *********************************/public voID updatescore (float newscore) { // display GUI score score = (int)(newscore * 76); guiText.text = "score" + score; }
我用一个for循环搞砸了试图实现这个但是无处接近.
解决方法 我刚刚创建了这个代码,它解决了你的问题.我目前正在自己的游戏中使用它.scoreManager类的主要思想是保持得分并在每一帧更新它.它使用Stack来跟踪要添加的分数,这样我们就没有增加分数的幻数.
因此,当玩家获得新点时,只需调用addscore()函数,然后scoreManager类将自行处理更新.
它会有一个始终运行的线程,它会逐位从currentscore增加到newscore,这样就可以像你想要的那样由用户观察到这种变化.
添加了该主题以减少您在发布的其他问题中遇到的“滞后”:Why is my game lagging huge when I call a method?
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Threading;public class scoreManager : MonoBehavIoUr { public GUIText score; private int currentscore = 0; public int scoreToUpdate = 0; private Stack<int> stack; private Thread t1; private bool isDone = false; voID Awake() { stack = new Stack<int>(); t1 = new Thread(updatescore); t1.Start(); } private voID updatescore() { while(true) { if(stack.Count > 0) { int newscore = stack.Pop() + currentscore; for(int i = currentscore; i <= newscore; i++) { scoreToUpdate = i; Thread.Sleep(100); // Change this number if it is too slow. } currentscore = scoreToUpdate; } if(isDone) return; } } voID Update() { score.text = scoreToUpdate + ""; } public voID addscore(int point) { stack.Push(point); } public voID OnApplicationQuit() { isDone = true; t1.Abort(); }}
我计划将此代码转换为Singleton,以便在我的游戏中只有一个此类的实例.我强烈建议你这样做.
总结以上是内存溢出为你收集整理的c# – 如何一次更新一个GUI得分?全部内容,希望文章能够帮你解决c# – 如何一次更新一个GUI得分?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)