数组数据每隔一帧就有意外数据

Posted

技术标签:

【中文标题】数组数据每隔一帧就有意外数据【英文标题】:Array data has unexpected data every other frame 【发布时间】:2021-08-16 05:23:42 【问题描述】:

控制台日志

我的列表正在添加精灵名称并将其转换为整数以添加到列表中,然后我创建了一个函数来显示列表,但每当我在更新循环中显示列表时,它会在仅显示 0 之间交替

和实际值。当我不把它放在更新循环中时,它只显示 0's

public class ballMove : MonoBehaviour 

int[] BallOrder = new int[5]; // me initializing the variable in the 
beginning of the program

// int[] BallOrder = 4,6,3,2,7; if I do this instead of showing 0's it 
shows 4,6,3,2,7 when I click the mouse down.

void CreateBalls(int HowMany) 
// makes balls with a unique picture size and position
for (int i = 0; i < HowMany; i++) 
        BallClone = Instantiate(Ball);

        BallPic = BallClone.GetComponent<SpriteRenderer>();
        // give each ball a random image, each image is a number
        RandImg(); 
        // just using i for testing purposes.        
        BallOrder[i] = i;
        //array should just be 1,2,3,4,5
    


void ShowList() 

    System.Array.Sort(BallOrder);
    string text = "";
    
    for (int i = 0; i < BallOrder.Length; i++) 
    
        text = (text + " " + BallOrder[i]);
    
    
    print(text);


void Update()

    // here it shows the array correctly 1,2,3,4,5
    ShowList();

void OnMouseDown() 
    string BallNum = ConvertSprite(GetComponent<SpriteRenderer>().sprite);
    int test = int.Parse(BallNum);
    ShowList(); // here when I show list it just shows 0,0,0,0,0
    Destroy(gameObject);



【问题讨论】:

您是否在其他地方打电话给ShowList()?您解析PicName 以获取要添加到此列表中的整数的频率和位置是多少?从代码中,您发布的内容很难说。我相信您在某处用全 0 覆盖现有列表。您能否在设置数组BallOrder 的方式和位置添加更多上下文? 我唯一一次使用 showList 是在更新循环中。我将编辑我的帖子以添加更多上下文,并希望它可以提供帮助。顺便说一句,这是我第一次使用它,所以我不会很专业。基本上我将精灵图像转换为字符串,然后将字符串转换为整数,然后添加到列表中。 新人没问题。通常,所有代码都应输入并放在问题中,而不是作为图像发送。 因为它打印了两次,我不得不猜测你在项目的两个地方都有这个脚本,要么在同一个游戏对象上,要么在不同的对象上。我的另一个想法是你如何抓取名称的子字符串正在做一些奇怪的事情。 test.Substring(0,2) 行,所有的名字都至少有这么长吗?还是更短一些? 我将它从脚本中分离出来,它显示正确,谢谢你的帮助伙计:)。 【参考方案1】:

只是为了回答不在 cmets 中的问题,问题是控制台正在打印可能被视为错误数据的内容。

通过在预期(6 个随机数)和未预期(6 个零)之间交替,显然,该函数被调用了两次,但是从进一步添加代码 sn-ps 来看,没有理由说明为什么该函数会被多次调用。

从数组数据的初始化开始,出现 6 个零而不是数据的唯一方法是数据被覆盖或从未初始化。由于数组在初始化后就再也没有被写入,这一定意味着它被错误地初始化了。

发生这种情况的唯一方法是将脚本附加到场景中的两个对象,其中一个对象正在正确初始化数据,而另一个对象则没有像 Start 中发生的那样初始化。

解决方案是从场景中的两个对象之一中删除未使用的脚本。

【讨论】:

以上是关于数组数据每隔一帧就有意外数据的主要内容,如果未能解决你的问题,请参考以下文章

查询数据库的时候 可以查询出每隔一段时间(比如2小时)这段时间段前3条数据

vue中如何每隔一段时间请求一次后台数据?

Django 无法每隔一段时间连接到数据库(Centos)

显示自最近的数据库 DateTime 以来经过的时间,并每隔一秒增加一次

怎么自动发邮件(就是我想每隔一分钟邮件自动发)

使用 setInterval 和 clearInterval 设置状态的问题