https://codeforfun.jp/android-studio-catch-the-ball-intro/
上記のサイトでゲームアプリを作ったのですが結果画面への遷移ができません。
画面の遷移には条件があるのでしょうか。
package com.example.catchtheball; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.graphics.Point; import android.os.Bundle; import android.os.Handler; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { private TextView scoreLabel; private TextView startLabel; private ImageView box; private ImageView orange; private ImageView black; private ImageView pink; //位置 private float boxY; private float orangeX; private float orangeY; private float blackX; private float blackY; private float pinkX; private float pinkY; //スコア private int score = 0; //サイズ private int frameHeight; private int boxSize; private int screenWidth; private int screenHeight; //Handler & Timer private Handler handler = new Handler(); private Timer timer = new Timer(); //Status private boolean action_flag = false; private boolean start_flag = false; //ゲーム開始前(false) プレイ中(true) //speed private int boxSpeed; private int orangeSpeed; private int blackSpeed; private int pinkSpeed; //Sound private SoundPlayer soundPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); soundPlayer = new SoundPlayer(this); scoreLabel = findViewById(R.id.scoreLabel); startLabel = findViewById(R.id.startLabel); box = findViewById(R.id.box); orange = findViewById(R.id.orange); black = findViewById(R.id.black); pink = findViewById(R.id.pink); //ScreenSize WindowManager wm = getWindowManager(); Display display = wm.getDefaultDisplay(); Point size = new Point(); display.getSize(size); screenWidth = size.x; screenHeight = size.y; boxSpeed = Math.round(screenHeight / 60f); orangeSpeed = Math.round(screenWidth / 60f); blackSpeed = Math.round(screenWidth / 45f); pinkSpeed = Math.round(screenWidth / 36f); orange.setX(-80.0f); orange.setY(-80.0f); pink.setX(-80.0f); pink.setY(-80.0f); black.setX(-80.0f); black.setY(-80.0f); scoreLabel.setText("score : 0"); //ゲームスタート時点のスコア表示 } public void changePos(){ //changePos 内でボックスとボールを動かす前に、毎回 hitCheck を呼ぶことで衝突判定を行います。 hitCheck(); //Boxの処理 if(action_flag){ boxY -= boxSpeed; //UP }else{ boxY += boxSpeed; //DOWN } if(boxY < 0 ) boxY = 0; if(boxY > frameHeight -boxSize) boxY = frameHeight - boxSize; box.setY(boxY); //orange-Ballの処理 orangeX -= orangeSpeed; if(orangeX < 0){ orangeX = screenWidth + 20; orangeY = (float)Math.floor(Math.random() * (frameHeight - orange.getHeight())); } orange.setX(orangeX); orange.setY(orangeY); //black-Ballの処理 blackX -= blackSpeed; if(blackX < 0){ blackX = screenWidth + 10; blackY = (float)Math.floor(Math.random() * (frameHeight - black.getHeight())); } black.setX(blackX); black.setY(blackY); //pink-Ballの処理 pinkX -= pinkSpeed; if(pinkX < 0){ pinkX = screenWidth + 5000; pinkY = (float)Math.floor(Math.random() * (frameHeight - pink.getHeight())); } pink.setX(pinkX); pink.setY(pinkY); scoreLabel.setText("Score : " +score); } public void hitCheck(){ //orange-Ball float orangeCenterX = orangeX + orange.getWidth() / 2; float orangeCenterY = orangeY + orange.getHeight() / 2; if(hitStatus(orangeCenterX, orangeCenterY)){ orangeX = -10.0f; score += 10; soundPlayer.playHitSound(); } //pink-Ball float pinkCenterX = pinkX + pink.getWidth() / 2; float pinkCenterY = pinkY + pink.getHeight() / 2; if(hitStatus(pinkCenterX, pinkCenterY)){ pinkX = -10.0f; score += 30; soundPlayer.playHitSound(); } // Black-ball float blackCenterX = blackX + black.getWidth() / 2; float blackCenterY = blackY + black.getHeight() / 2; if(hitStatus(blackCenterX, blackCenterY)){ soundPlayer.playOverSound(); // Game Over! if (timer != null) { timer.cancel(); timer = null; } // 結果画面へ Intent intent = new Intent(getApplicationContext(),ResultActivity.class); intent.putExtra("SCORE",score); startActivity(intent); } } public boolean hitStatus(float centerX,float centerY){ return (0 <= centerX && centerX <= boxSize && boxY <= centerY && centerY <= boxY + boxSize) ? true : false; } @Override public boolean onTouchEvent(MotionEvent event) {//onTouchEvent では、初めて画面がタップされた時に if (start_flag == false) { start_flag = true; // start_flg を true にする FrameLayout frame = findViewById(R.id.frame); frameHeight = frame.getHeight(); boxY = box.getY(); boxSize = box.getHeight(); /*startLabel.setVisibility(View.INVISIBLE); startLabel.setVisibility(View.GONE); INVISIBLE は非表示にするだけ、GONE は完全に消すという違いがあります*/ startLabel.setVisibility(View.GONE); //startLabel を消す //タイマーを開始 という処理を行います。 //schedule(TimerTask task, long delay, long period) //task : 実行する処理 //delay : タスクを実行するまでに待機する時間(ミリ秒で指定) //period : タスクの実行間隔(ミリ秒で指定) timer.schedule(new TimerTask() { @Override public void run() { handler.post(new Runnable() { @Override public void run() { changePos(); } }); } }, 0, 20); } else { if (event.getAction() == MotionEvent.ACTION_DOWN) { //boxの位置を上に移動させます. フラグをオンにする action_flag = true; } else if (event.getAction() == MotionEvent.ACTION_UP) { action_flag = false; } } return true; } @Override public void onBackPressed() { super.onBackPressed(); } }
package com.example.catchtheball; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class ResultActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result); TextView scoreLabel = findViewById(R.id.scoreLabel); TextView highScoreLabel = findViewById(R.id.highScoreLabel); int score = getIntent().getIntExtra("SCORE",0); //setTextには文字列を指定する必要がありますが、score はint型です。 //このような場合は「 + ""」とするだけで文字列として扱えるようになります。 scoreLabel.setText(score + ""); SharedPreferences sharedPreferences = getSharedPreferences("GAME_DATA",MODE_PRIVATE); int highScore = savedInstanceState.getInt("HIGH_SCORE : ",score); if(score > highScore) { highScoreLabel.setText("HIGH_SCORE : " + score); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt("HIGH_SCORE" ,score); editor.apply(); }else{ highScoreLabel.setText("HIGH_SCORE : "+ highScore); } } public void tryAgain(View view){ startActivity(new Intent(getApplicationContext(),MainActivity.class)); } @Override public void onBackPressed() { super.onBackPressed(); } }
package com.example.catchtheball; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class StartActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); } public void startGame(View view){ startActivity(new Intent(getApplicationContext(),MainActivity.class)); } }
回答2件
あなたの回答
tips
プレビュー