2013-04-05 91 views
0

我有一个游戏,并开始int值分= 100;并且每次点击一个按钮后游戏进度会降低,直到游戏结束。我使用开关在onClick方法中扣除了点数。游戏结束后,我再次加载游戏方法进行第二轮,这是我的问题。如果我将这个int变量作为一个实例变量,它将在第一轮结束后保留​​它的值,并且我需要从100开始重新计算。如果我将它声明为局部变量,那么我的方法使用intent调用另一个活动并发送最终点值没有看到这个变量。如何解决这个问题?如何声明int变量对我的所有方法都可见?

因此,我宣布了一些变量:

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); 

} 
+0

请显示相关代码。 – 2013-04-05 13:56:39

+0

当游戏重新加载时,为什么不影响100到你的变量? – VinceFR 2013-04-05 13:56:50

+0

将其设置回100有什么问题? – Simon 2013-04-05 13:56:58

回答

1

我重装游戏方法,一旦更多...

你可以有一些初始化代码,这可能可以为这一目标。在比赛开始前准备好所有必要的场地:

public class Game 
{ 
    private int myCounter; 

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

否则,只需在您的代码中使用reset()方法即可在游戏重新开始之前调用该方法。

1

而从一个活动移动到另一个,只需通过INT与意图一起类似

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

,如果它只是知名度的问题,尝试getter和setter) 或乌尔情况下梅索德只是substracts 1从INT每次它叫

0

中序,以避免创建实例的每次访问点使用Static

class PointsUtil{ 
    public static int points =10 
    } 

在任何地方在PROGRAMM

PointsUtil.points= points+new points 

当方法重载再次呼吁

PointsUtil.points= 10; 
+0

这没有奏效。我得到错误,需要删除静态修饰符,然后它不起作用。 – marjanbaz 2013-04-05 14:22:06

-1

尝试使用java.lang.Integer中,而不是原始的INT。