ゲームを作成しようとしていて、カウントダウンタイマーを設定しようとしています。 これは私のウェルカムページクラスで、ゲームを開始するボタンとカウントダウンタイマーが含まれています。テキストビューを使用してサーフェスビューキャンバスにカウントダウンを作成する方法
public class WelcomePage extends Activity {
Spinner timerValueSpinner;
String[] timeValues;
Resources resourcePointer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature (Window. FEATURE_NO_TITLE);
setContentView(R.layout.welcome_page);
timerValueSpinner = (Spinner)this.findViewById(R.id.secondsSpinner);
resourcePointer = getResources();
timeValues = resourcePointer.getStringArray(R.array.seconds_list);
launchButton();
}
public void launchButton(){
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(WelcomePage.this,Main.class);
if(timerValueSpinner.getSelectedItemPosition() > -1){
int parsedSpinnerValue = 0;
parsedSpinnerValue = Integer.parseInt(timeValues[timerValueSpinner.getSelectedItemPosition()]);
if(parsedSpinnerValue > 0){
intent.putExtra("TimeValue", parsedSpinnerValue);
startActivity(intent);
}
}
}
});
}
これは、私がカウントダウンタイマーを示すTextViewを置くメインクラスです。
public class Main extends Activity {
Countdown timer;
TextView statusTextVie;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature (Window. FEATURE_NO_TITLE);
setContentView(new GameView(this));
Bundle extras = getIntent().getExtras();
int timeVal = extras.getInt("TimeValue", 0);
statusTextVie = (TextView)this.findViewById(R.id.timerVie);
if (timeVal > 0){
if(timer != null){
timer.cancel();
}
timer = new Countdown((timeVal + 1) * Countdown.oneSecond, Countdown.oneSecond,statusTextVie);
timer.start();
}
setContentView(新しいGameView(this))に問題があります。私は、WelcomePageクラスから再生ボタンを押します。 App stop and show "残念ながら、(App Name)has stopped" setContentView(R.layout.activity_main)に変更すると、アプリは機能しますが、カウントダウンタイマーとゲームは表示されません。
これは私のGameViewクラスであり、表面ビューを含んでいます。
public class GameView extends SurfaceView {
private SurfaceHolder holder;
private GameLoopThread gameLoopThread;
private List<Sprite> sprites = new ArrayList<Sprite>();
private long lastClick;
private Bitmap bmpExplode;
private List<TempSprite> temps = new ArrayList<TempSprite>();
private SoundPool sounds;
private int booms;
private int msprite=30;
Countdown timer;
TextView statusTextVie = (TextView)this.findViewById(R.id.timerVie);
String text = statusTextVie.getText().toString();
public GameView(Context context) {
super(context);
gameLoopThread = new GameLoopThread(this);
holder = getHolder();
holder .addCallback(new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry){
try{
gameLoopThread.join();
retry= false;
}catch (InterruptedException e){
}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
createSprites();
gameLoopThread.setRunning(true);
gameLoopThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
});
bmpExplode = BitmapFactory.decodeResource(getResources(), R.mipmap.deadline);
sounds= new SoundPool(10,AudioManager.STREAM_MUSIC,0);
booms=sounds.load(context,R.raw.boom,1);
}
private void createSprites() {
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b1));
sprites.add(createSprite(R.mipmap.b2));
sprites.add(createSprite(R.mipmap.b3));
sprites.add(createSprite(R.mipmap.b4));
sprites.add(createSprite(R.mipmap.b5));
sprites.add(createSprite(R.mipmap.b6));
sprites.add(createSprite(R.mipmap.b2));
sprites.add(createSprite(R.mipmap.b3));
sprites.add(createSprite(R.mipmap.b4));
sprites.add(createSprite(R.mipmap.b5));
sprites.add(createSprite(R.mipmap.b6));
}
private Sprite createSprite(int resouce) {
Bitmap bmp = BitmapFactory.decodeResource(getResources(), resouce);
return new Sprite(this,bmp);
}
@SuppressLint("WrongCall")
@Override
protected void onDraw (Canvas canvas) {
canvas.drawColor (Color. BLACK);
for (int i = temps.size() - 1; i >= 0; i--) {
temps.get(i).onDraw(canvas);
}
for (Sprite sprite : sprites) {
sprite.onDraw(canvas);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (System.currentTimeMillis() - lastClick > 300) {
lastClick = System.currentTimeMillis();
synchronized (getHolder()) {
float x=event.getX();
float y=event.getY();
for (int i = sprites.size()-1; i >= 0; i--) {
Sprite sprite = sprites.get(i);
if (sprite.isCollition(x,y)) {
if (i < msprite){
msprite--;
sounds.play(booms, 1.0f, 1.0f, 0,0, 1.5f);
}
sprites.remove(sprite);
temps.add(new TempSprite(temps, this, x, y, bmpExplode));
break;
}
}}
}
return true;
}
}
どのように私はsurfaceviewキャンバス