前提・実現したいこと
android studioでkotlinの勉強中です。
現在、避けるゲームを作っていますが、最初左上から落下し、それからランダムな位置で出てくるようになってるのですが、それを最初からランダムな位置からスタートするようにしたいのですが、どうしても左上からになってしまい困ってます。お知恵をお願いします。
MainActivity
1package com.example.myapplication 2 3import android.content.Intent 4import android.graphics.Point 5import android.os.Bundle 6import android.os.Handler 7import android.support.v7.app.AppCompatActivity 8import android.view.MotionEvent 9import android.view.View 10import android.widget.FrameLayout 11import android.widget.ImageView 12import android.widget.TextView 13import kotlinx.android.synthetic.main.activity_main.* 14import java.util.* 15 16class MainActivity : AppCompatActivity() { 17 18 19 // サイズ 20 private var frameHeight = 0 21 private var frameside = 0 22 private var hitoSize = 0 23 private var screenWidth = 0 24 private var screenHeight = 0 25 26 // 位置 27 private var hitoX = 0f 28 private var hitoY = 0f 29 private var kenX = 0f 30 private var kenY = 0f 31 32 33 // スピード 34 private var hitoSpeed = 0 35 private var kenSpeed = 0 36 37 38 // Score 39 private var score = 0 40 41 // Handler & Timer 42 private val handler = Handler() 43 private var timer: Timer? = Timer() 44 45 // Status 46 private var action_flg = false 47 private var start_flg = false 48 49 // Sound 50 private var soundPlayer: SoundPlayer? = null 51 override fun onCreate(savedInstanceState: Bundle?) { 52 super.onCreate(savedInstanceState) 53 setContentView(R.layout.activity_main) 54 soundPlayer = SoundPlayer(this) 55 scoreLabel.text = "scoreLavel" 56 startLabel.text = "startLabel" 57 58 59 // Screen Size 60 val wm = windowManager 61 val display = wm.defaultDisplay 62 val size = Point() 63 display.getSize(size) 64 65 screenWidth = size.x 66 screenHeight = size.y 67 68 hitoSpeed = Math.round(screenWidth / 60f) 69 kenSpeed = Math.round(screenHeight / 60f) 70 71 72 ken.x = -100.0f 73 ken.y = -100.0f 74 75 scoreLabel.setText("Score : 0") 76 77 } 78 79 fun changePos() { 80 hitCheck() 81 82 // ken 83 kenY += kenSpeed.toFloat() 84 if (kenY > screenHeight) { 85 kenY = -100f 86 kenX = (Math.random() * (screenHeight - ken!!.width)).toFloat() 87 } 88 ken!!.x = kenX 89 ken!!.y = kenY 90 91 // hito 92 if (action_flg) { 93 hitoX -= hitoSpeed.toFloat() 94 } else { 95 hitoX += hitoSpeed.toFloat() 96 } 97 if (hitoX < 0) hitoX = 0f 98 if (hitoX > frameHeight - hitoSize) hitoX = frameHeight - hitoSize.toFloat() 99 hito.x = hitoX 100 scoreLabel!!.text = "Score : $score" 101 } 102 103 fun hitCheck() { 104 105 // ken 106 val kenCenterX = kenX + ken.width / 2 107 val kenCenterY = kenY + ken.height / 2 108 if (hitStatus(kenCenterX, kenCenterY)) { 109 soundPlayer!!.playHitSound() 110 if (timer != null) { 111 timer!!.cancel() 112 timer = null 113 } 114 // 結果画面へ 115 val intent = Intent(applicationContext, ResultActivity::class.java) 116 intent.putExtra("SCORE", score) 117 startActivity(intent) 118 119 } 120 121 } 122 123 fun hitStatus(centerX: Float, centerY: Float): Boolean { 124 return if (screenHeight <= centerY && centerY <= hitoSize && 125 hitoX <= centerX && centerX <= hitoX + hitoSize) true else false 126 } 127 128 override fun onTouchEvent(event: MotionEvent): Boolean { 129 if (!start_flg) { 130 start_flg = true 131 val frame = findViewById<FrameLayout>(R.id.frame) 132 frameHeight = frame.width 133 hitoX = hito!!.x 134 hitoSize = hito!!.height 135 startLabel!!.visibility = View.GONE 136 timer!!.schedule(object : TimerTask() { 137 override fun run() { 138 handler.post { changePos() } 139 } 140 }, 0, 20) 141 } else { 142 if (event.action == MotionEvent.ACTION_DOWN) { 143 action_flg = true 144 } else if (event.action == MotionEvent.ACTION_UP) { 145 action_flg = false 146 } 147 } 148 return true 149 } 150 151 override fun onBackPressed() {} 152}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:id="@+id/scoreLabel" android:layout_width="match_parent" android:layout_height="50dp" android:text="Score : 300" android:textSize="18sp" android:paddingLeft="10dp" android:gravity="center_vertical"/> <FrameLayout android:id="@+id/frame" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/startLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="タップしてスタート" android:textSize="20sp" android:layout_gravity="center"/> <ImageView android:id="@+id/hito" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center_vertical" android:src="@drawable/hito" /> <ImageView android:id="@+id/ken" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ken"/> </FrameLayout> </LinearLayout>
試したこと
参考書、他サイト情報
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/14 09:33
2020/03/14 10:55
2020/03/14 11:09
2020/03/14 15:16
2020/03/14 15:17
2020/03/14 17:12 編集
2020/04/08 02:47
2020/04/08 04:13