2011-12-07 8 views
0

대리석을 쫓는 게임을 만들려고합니다. 다른 버튼 배경이 동등한 경우에만 버튼 배경을 변경하고 싶습니다. 그러나 작동하도록 if 문을 사용하여 onclick을 가져올 수 없습니다. 현재 가지고있는 코드는 다음과 같습니다. 버튼을 클릭하고 배경이 변경 될 때마다if 문을 사용하여 단추 배경을 변경하려고 시도합니다.

package test.tablet.design; 

import java.text.DateFormat; 
import java.util.Date; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MarbleGame extends Activity { 

private Button btnA1mc; private Button btnA2mc; private Button btnA3mc; private Button btnA4mc; private Button btnB1mc; private Button btnB2mc; private Button btnB3mc; private Button btnB4mc; 
private Button btnC1mc; private Button btnC2mc; private Button btnC3mc; private Button btnC4mc; private Button btnD1mc; private Button btnD2mc; private Button btnD3mc; private Button btnD4mc; 
private Button btnE1mc; private Button btnE2mc; private Button btnE3mc; private Button btnE4mc; private Button btnF1mc; private Button btnF2mc; private Button btnF3mc; private Button btnF4mc; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.marble_chase); 
    TextView tv_time = (TextView) findViewById(R.id.tv_time); 
    String currenttime = DateFormat.getDateTimeInstance().format(new Date()); 
    tv_time.setText(currenttime); 

    btnA1mc = (Button)findViewById(R.id.btnA1mc); btnA2mc = (Button)findViewById(R.id.btnA2mc); btnA3mc = (Button)findViewById(R.id.btnA3mc); btnA4mc = (Button)findViewById(R.id.btnA4mc); 
    btnB1mc = (Button)findViewById(R.id.btnB1mc); btnB2mc = (Button)findViewById(R.id.btnB2mc); btnB3mc = (Button)findViewById(R.id.btnB3mc); btnB4mc = (Button)findViewById(R.id.btnB4mc); 
    btnC1mc = (Button)findViewById(R.id.btnC1mc); btnC2mc = (Button)findViewById(R.id.btnC2mc); btnC3mc = (Button)findViewById(R.id.btnC3mc); btnC4mc = (Button)findViewById(R.id.btnC4mc); 
    btnD1mc = (Button)findViewById(R.id.btnD1mc); btnD2mc = (Button)findViewById(R.id.btnD2mc); btnD3mc = (Button)findViewById(R.id.btnD3mc); btnD4mc = (Button)findViewById(R.id.btnD4mc); 
    btnE1mc = (Button)findViewById(R.id.btnE1mc); btnE2mc = (Button)findViewById(R.id.btnE2mc); btnE3mc = (Button)findViewById(R.id.btnE3mc); btnE4mc = (Button)findViewById(R.id.btnE4mc); 
    btnF1mc = (Button)findViewById(R.id.btnF1mc); btnF2mc = (Button)findViewById(R.id.btnF2mc); btnF3mc = (Button)findViewById(R.id.btnF3mc); btnF4mc = (Button)findViewById(R.id.btnF4mc); 

    btnE2mc.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       btnE2mc.setBackgroundResource(R.drawable.marble_x); 
       btnB4mc.setBackgroundResource(R.drawable.marble); 
      } 
     }); 
    btnB4mc.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      if (btnE2mc.equals(getResources().getDrawable(R.drawable.marble_x))) 
      { 
      btnB4mc.setBackgroundResource(R.drawable.marble_x); 
      btnC1mc.setBackgroundResource(R.drawable.marble); 
      } 
      else{} 
     } 
    }); 
    btnC1mc.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      if (btnB4mc.equals(getResources().getDrawable(R.drawable.marble_x))) 
      { 
      btnC1mc.setBackgroundResource(R.drawable.marble_x); 
      btnF1mc.setBackgroundResource(R.drawable.marble); 
      } 
      else{} 
     } 
    }); 
} 

} 
+0

그래서 그려진 그림을 기반으로 대리석의 위치를 ​​추적하고 있습니까? 좌표가 그 정보를 기반으로 그릴 때 대리석의 현재 및 이전 위치를 추적하는 것이 더 쉬울까요? – Thomas

+0

그것을 할 다른 방법을 찾았습니다, 여러분 덕분에 도움이됩니다. – jbnonn79

답변

0

나는 참으로 내부 boolean 세트를 가질 것입니다. 버튼을 클릭 할 때마다

boolean isBackgroundChanged = false; 

, 당신은 배경을 변경하고 trueisBackgroundChanged을 설정합니다. 대신 일을 그리고, :

btnB4mc.equals(getResources().getDrawable(R.drawable.marble_x) 

당신은 당신은 항상 false를 반환하는 그리기 개체로 Button 객체를 비교하기 위해 노력하고

if(isBackgroundChanged)... 
+0

내 코드, Still learning android를 사용하여 설명 할 수 있습니까? 이해할 수 있습니다. 작업 코드를 보면 알 수 있습니다. – jbnonn79

0

것이다.

각 개별 버튼의 상태를 추적하기 위해 View.setTag()를 사용하려고 할 수 있습니다. 이름이 있거나 이름이없는 태그를 사용하면 임의의 데이터를 개별보기에 연결할 수 있습니다. 아래 예제에서 자동 상자는 부울을 부울로 변환하는 데 사용됩니다.

if ((Boolean)btn1.getTag()) { 
    btn1.setTag(false); 
    btn2.setTag(true); 
    // TODO actual background swapping 
} 

가독성과 중복을 줄이고, 당신은 인수로 두 개의 버튼이 걸릴 것입니다 당신을 위해 교환을 할 수있는 도우미 기능을 사용 할 수 있습니다.

관련 문제