0

我有一个游戏,开始 int value points = 100; 并且随着游戏进度,每次点击按钮后该值都会减少,直到游戏结束。我在 onClick 方法中使用 switch 子跟踪点。游戏结束后,我再次为第二轮重新加载游戏方法,这是我的问题。如果我将该 int 变量设为实例变量,它将在第一轮结束后保持其值,并且我需要从 100 重新开始。如果我将其声明为局部变量,我的方法将使用意图调用另一个活动并发送最终点值看不到这个变量。如何解决这个问题?

所以,我声明了一些变量:

int numberPointsGame = 100;
static int numberPointsTotal;

现在,在我的 onClick 方法中,我设置了一些文本并对这些点进行子跟踪:

public void onClick(View v) {

        switch(v.getId()){

        case R.id.bA1:
            numberPointsGame = numberPointsGame - 5;
            a1.setText(mA1);
            break;
        case R.id.bA2:
            numberPointsGame = numberPointsGame - 5;
            a2.setText(mA2);
            break;

现在,如果用户输入正确的答案,我将其放在另一个实例变量中,然后将其发送到另一个弹出活动,然后重新加载第一个活动并再次执行此操作。

if (ukucanRezultatStrK.equals(konacanNormalized)){
                                                        konacnoResenje.setText(mKonacno);


                                                        Intent i = new Intent(Asocijacije.this, Popup_asocijacije.class);
                                                        i.putExtra("brojPoenaPrimljeno", numberPointsGame);
                                                        startActivity(i);

                                                        mHandler.postDelayed(mLaunchTask,3700);

                                                        numberPointsTotal = numberPointsTotal + numberPointsGame;

                                                        setResults();


                                                 }else{
                                                    Toast.makeText(Asocijacije.this, "Wrong answer!", Toast.LENGTH_SHORT).show();
                                                    }

第二次重新加载后,当游戏结束时,我进入主菜单并将最终结果(两个游戏结果的总和)设置为一个按钮。我总是得到 0。这是主要问题。

Intent i = new Intent(getApplicationContext(), Izbor.class);
                i.putExtra("numberPointsGame", numberPointsTotal);
                startActivity(i);

和我的主菜单类:

int numberPointsGame;
    int score = 0;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     

        setContentView(R.layout.izbor);

        addListenerOnButton();

        Bundle extras = getIntent().getExtras(); 
        if(extras !=null) {
           score = extras.getInt("ukupnoAsocijacije", 0);
        }
    }

private void addListenerOnButton() {

poeniAso.setText("" + score);

}
4

4 回答 4

1

我再次重新加载游戏方法...

您可以有一些可以用于此目的的初始化代码......在游戏开始之前准备所有必要的字段:

public class Game
{
    private int myCounter;

    public void initialize()
    {
         this.myCounter = 100;
         //initialize canvas, connections, etc.
    }
}

或者,只需reset()在您的代码中添加一个在游戏重新开始之前调用的方法。

于 2013-04-05T13:57:52.487 回答
1

在从一个活动移动到另一个活动时,只需将 int 与意图一起传递

Intent intent = new Intent(...);
intent.putInt("MyImportantInt", someNumber);

如果它只是可见性问题,请尝试 getter 和 setter ;) 或者在你的情况下,每次调用它时只从 int 中减去 1 的方法

于 2013-04-05T13:58:33.627 回答
0

为了避免每次访问点都创建实例使用Static

 class PointsUtil{
    public static int  points =10   
    }

在程序中的任何地方

PointsUtil.points= points+new points

当方法 reload 再次调用时

 PointsUtil.points= 10;
于 2013-04-05T13:59:41.247 回答
-1

尝试使用 java.lang.Integer 而不是原始 int。

于 2013-04-05T14:01:14.643 回答