はじめまして!
AndroidStudio(使用言語はJavaです)でキャッチングゲームを作成してました。
流れてきた画像を流し直す際にY座標を乱数を元に設定したいのですが乱数生成の箇所でエラーが出てしまいました。
ご回答よろしくお願いいたします。
実現したいこと
・乱数を生成して、生成した乱数を元に画像のY座標を設定したい。
該当のソースコード
Java
1package com.example.mogmogapp; 2 3import androidx.appcompat.app.AppCompatActivity; 4import androidx.constraintlayout.widget.ConstraintLayout; 5 6import android.content.Intent; 7import android.graphics.Point; 8import android.os.Bundle; 9import android.os.Handler; 10import android.view.Display; 11import android.view.MotionEvent; 12import android.view.View; 13import android.view.WindowManager; 14import android.widget.Button; 15import android.widget.ImageView; 16import android.widget.TextView; 17 18import java.util.Random; 19import java.util.Timer; 20 21public class PlayActivity extends AppCompatActivity { 22 23 private Timer PlayTimer; // タイマー用 24 private int timecount = 40;// タイマーカウント 25 private int scoreVal = 0; // スコア 26 private int count = 1000; 27 private final Handler mHandler = new Handler(); //UI Threadへのpost用ハンドラ 28 private final Handler mHandler2 = new Handler(); 29 30 private Runnable runnable; 31 private Runnable runnable2; 32 33 34 private Random random = new Random(); 35 private int a = 0; 36 private int b = 0; 37 private int c = 0; 38 39 private ConstraintLayout layout; 40 41 42 /*テキスト*/ 43 private TextView textTimeVal; 44 private TextView counttext; 45 46 /*スコア*/ 47 private TextView scoreText; 48 49 /*サイズ*/ 50 private int huntersize; 51 52 /*画像用*/ 53 private ImageView raou; 54 private ImageView hunter; 55 private ImageView maikusa; 56 private ImageView yakuza; 57 private ImageView udekumi; 58 59 /*ボタン用*/ 60 private Button upbtn; 61 private Button dwnbtn; 62 63 /*座標位置用*/ 64 private float raouX = 2200f; 65 private float raouY; 66 private float maikusaX = 1900f; 67 private float maikusaY; 68 private float udekumiX= 2500f; 69 private float udekumiY; 70 private float yakuzaX = 2300f; 71 private float yakuzaY; 72 private float hunterX; 73 private float hunterY; 74 75 76 /*画面のサイズ用*/ 77 private float screenx; 78 private float screeny; 79 80 81 @Override 82 protected void onCreate(Bundle savedInstanceState) { 83 super.onCreate(savedInstanceState); 84 setContentView(R.layout.activity_play); 85 86 // imageViewのIDの取得 87 raou = findViewById(R.id.raou); 88 maikusa = findViewById(R.id.maikusa); 89 udekumi = findViewById(R.id.udekumi); 90 yakuza = findViewById(R.id.yakuza); 91 hunter = findViewById(R.id.hunter); 92 scoreText = findViewById(R.id.scoreText); 93 counttext = findViewById(R.id.counttext); 94 95 textTimeVal = findViewById(R.id.textTimeVal); 96 97 // ボタンのIDの取得 98 upbtn = findViewById(R.id.Upbtn); 99 dwnbtn = findViewById(R.id.Dwnbtn); 100 101 //プレイ範囲の獲得 102 //layout = findViewById(R.id.play_activity); 103 104 // 画面範囲の取得 105 layout = findViewById(R.id.play_activity); 106 screenx = layout.getWidth(); 107 screeny = layout.getHeight() - textTimeVal.getHeight(); 108 109 110 // 座標セット 111 raou.setX(raouX); 112 maikusa.setX(maikusaX); 113 udekumi.setX(udekumiX); 114 yakuza.setX(yakuzaX); 115 116 117 // タイマーインスタンス生成 118 this.PlayTimer = new Timer(); 119 this.textTimeVal = (TextView) findViewById(R.id.textTimeVal); 120 121 122 // タイマーセット 123 runnable = new Runnable() { 124 @Override 125 public void run() { 126 if (timecount == 0) { 127 // 画面遷移(ランキング画面へ) 128 Intent intent = new Intent(getApplicationContext(), RankingDisp.class); 129 //intent.putExtra("YOUR_SCORE", scoreVal); 130 startActivity(intent); 131 132 133 } else { 134 timecount--; 135 textTimeVal.setText(String.valueOf(timecount)); 136 mHandler.postDelayed(runnable, 1000); 137 } 138 } 139 }; 140 mHandler.postDelayed(runnable, 1000); 141 textTimeVal.setText(String.valueOf(timecount)); 142 143 144 // 獲物の動きスピード設定 145 runnable2 = new Runnable() { 146 @Override 147 public void run() { 148 149 150 // ここでx座標の値を変更する 151 if (timecount != 0) { 152 153 //ラ王の画像移動処理 154 raouX -= 15f; 155 if (raouX < screenx){ 156 raouX = 2185f; 157 158 /*ここで乱数生成*/ 159 Random random = new Random(); 160 int y = random.nextInt((int)screeny); 161 raouY = y; 162 163 164 } 165 raou.setX(raouX);// 2185 166 raou.setY(raouY);// 0.0 167 168 169 //舞草の画像移動処理 170 maikusaX -= 15f; 171 if (maikusaX < screenx){ 172 maikusaX = 1900f; 173 } 174 maikusa.setX(maikusaX); 175 176 177 //腕組の画像移動処理 178 udekumiX -= 15f; 179 if (udekumiX < screenx){ 180 udekumiX = 2500f; 181 } 182 udekumi.setX(udekumiX); 183 184 185 //やくざの画像移動処理 186 yakuzaX -= 15f; 187 if (yakuzaX < screenx){ 188 yakuzaX = 2300f; 189 } 190 yakuza.setX(yakuzaX); 191 192 193 //count--; 194 counttext.setText(String.valueOf(count)); 195 mHandler2.postDelayed(runnable2, 100); 196 } 197 else { 198 //count--; 199 counttext.setText(String.valueOf(count)); 200 mHandler2.postDelayed(runnable2, 100); 201 } 202 } 203 }; 204 mHandler2.postDelayed(runnable2, 100); 205 counttext.setText(String.valueOf(count)); 206 207 208 209 /*上ボタンの挙動設定*/ 210 upbtn.setOnClickListener(new View.OnClickListener() { 211 @Override 212 public void onClick(View v) { 213 hunterY = hunter.getY(); 214 hunter.setY(hunterY - 20f); 215 } 216 }); 217 218 /*下ボタンの挙動設定*/ 219 dwnbtn.setOnClickListener(new View.OnClickListener() { 220 @Override 221 public void onClick(View v) { 222 hunterY = hunter.getY(); 223 hunter.setY(hunterY + 20f); 224 } 225 }); 226 } 227 228 229 230 231 232 public void onClick(View v) { 233 // runnableを無効にする 234 mHandler.removeCallbacks(runnable); 235 236 // intentでリクエストする 237 Intent intent = new Intent(this, RankingDisp.class); 238 startActivity(intent); 239 finish(); 240 } 241 242}
試したこと
乱数の生成位置を変更してみましたが結果は変わらず。
補足情報(FW/ツールのバージョンなど)
android-studio-2021.2.1.15-windows
