GetInt只能从主线程调用吗?

时间:2016-05-11 21:15:15

标签: c# android unity3d

这个问题之前已经得到了回答,但是我尝试了一切,但是没有用。

我在一个脆弱的鸟类克隆中有这个int,你收集硬币,它就像一个硬币计数器一样上升。

每次收集硬币都会

    PlayerPrefs.SetInt("coin", coin);
    coin+=1
    PlayerPrefs.Save();

当一个新的硬币产生时,我会在课程开始时这样做(不是在无效的Start())

private int coin = PlayerPrefs.GetInt("coin");

一切都很好。 我甚至通过在控制台代码中打印出来进行测试,然后将硬币倒计时就好了!

但我还有另一个名为Shop的场景,你可以在那里花钱。但是我做了一些绘制那些整数的方法,这应该可以正常工作,但我得到一个错误,getInt只能从主线程调用,这是愚蠢的,因为我不能把它放在启动/唤醒/更新方法,因为当我这样做时,我会犯更多错误。

我该怎么办?我想调用我在该场景中使用playerprefs保存的硬币整数来绘制硬币数量

我尝试这样称呼:private int coin = PlayerPrefs.GetInt("coin"); 但是我得到一个错误,即使我在实际游戏场景中调用它时也没有错误。

完整代码:

using UnityEngine;
using System.Collections;

public class SpriteScript : MonoBehaviour
{
    private int coin = PlayerPrefs.GetInt("coin");
    public Sprite num1;
    public Sprite num2;
    public Sprite num3;
    public Sprite num4;
    public Sprite num5;
    public Sprite num6;
    public Sprite num7;
    public Sprite num8;
    public Sprite num9;
    public Sprite num0;
    private int spritenum;
    private SpriteRenderer spriteRenderer;
    // Use this for initialization
    void Start()
    {
        spriteRenderer = GetComponent<SpriteRenderer>(); // we are accessing the SpriteRenderer that is attached to the Gameobject
        if (spriteRenderer.sprite == null) // if the sprite on spriteRenderer is null then
            spriteRenderer.sprite = num0; // set the sprite to sprite1
    }

    // Update is called once per frame
    void Update()
    {
        if (coin < 10)
        {
            spritenum = coin;
            if (coin > 10)
            {
                if (coin < 20)
                {
                    spritenum = coin - 10;
                }
                if (coin > 20)
                {
                    if (coin < 30)
                    {
                        spritenum = coin - 20;
                    }
                    if (coin > 30)
                    {
                        if (coin < 40)
                        {
                            spritenum = coin - 30;
                        }
                        if (coin > 40)
                        {
                            if (coin < 50)
                            {
                                spritenum = coin - 40;
                            }
                            if (coin == 50)
                            {
                                spritenum = coin - 50;
                            }
                        }
                    }
                }
            }
        }

        ChangeTheDamnSprite();

    }
    void ChangeTheDamnSprite()
    {
        if (spritenum == 0)
        {
            spriteRenderer.sprite = num0;
        }
        if (spritenum == 1)
        {
            spriteRenderer.sprite = num1;
        }
        if (spritenum == 2)
        {
            spriteRenderer.sprite = num2;
        }
        if (spritenum == 3)
        {
            spriteRenderer.sprite = num3;
        }
        if (spritenum == 4)
        {
            spriteRenderer.sprite = num4;
        }
        if (spritenum == 5)
        {
            spriteRenderer.sprite = num5;
        }
        if (spritenum == 6)
        {
            spriteRenderer.sprite = num6;
        }
        if (spritenum == 7)
        {
            spriteRenderer.sprite = num7;

        }
        if (spritenum == 8)
        {
            spriteRenderer.sprite = num8;
        }
        if (spritenum == 9)
        {
            spriteRenderer.sprite = num9;
        }
    }
}

顺便说一句,如果你想知道,它几乎看你有多少硬币并替换精灵以匹配数字,请不要质疑我用来绘制硬币金额的愚蠢方式,你能帮忙吗?我解决了这个问题?正如我所说,我尝试将它放在启动方法中,没有任何反应,而是更多的错误。

哦,如果改变了什么,我就建立了android

1 个答案:

答案 0 :(得分:0)

我怀疑你是以错误的方式接近这个问题。我建议您创建一个名为CoinController的新类:Monobehaviour并将其附加到您的播放器。

public class CoinController: MonoBehaviour {
    int coins;

    public int Coins {
        get {
            return coins;
        }
    }

    public Sprite GetSprite() {
        //logic for determining sprite based on number of coins here
    }


    public void AddCoins(int num) {
        coins += num;
    }

    public void SpendCoins(int num) {
        coins -= num;
    }
}


CoinController coinController = GetComponent<CoinController>();
coinController.AddCoins(5);
coinController.SpendCoins(2);

//in update method
Sprite thisSprite = coinController.GetSprite();
//draw sprite logic, not sure how you're doing this, but DrawCoinSprite would be some method that updates which sprite to draw
DrawCoinSprite(thisSprite);

我希望有所帮助!