私はmosnsters
をグリッドの周りを動かし、脆弱な状態と安全な状態を交互にするゲームを作成しています。android studioがfindByViewId変数を解決しない
私の問題は、私はタイマーやスコアのための私の見解は私のビューを更新したいですが、私のプログラムが何らかの理由でscore_text
とtimer_text
clickMonster
方法についての私のfindByViewId
変数を認識していないスコア表示を更新し、そしてcountTimer
は時間ビューを更新
CODE:
package com.oreilly.demo.android.pa.uidemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import com.oreilly.demo.android.pa.uidemo.model.Monster;
import com.oreilly.demo.android.pa.uidemo.model.Monsters;
import com.oreilly.demo.android.pa.uidemo.view.MonsterView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
/** time for game */
static int time;
/** earned score */
static int score;
static TextView score_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MonsterView mview = (MonsterView) findViewById(R.id.dots);
Monsters monsters = new Monsters(4, 4);
for (int i = 0; i < monsters.n; i++) {
for (int j = 0; j < monsters.m; j++) {
if (Math.random() < 0.7) monsters.addMonster(i, j, 150 + 250*j, 150 + 250*i, 100);
}
}
mview.setParams(this, monsters);
mview.setOnTouchListener(new MonsterTouchListener(monsters));
TextView timer_text = (TextView) findViewById(R.id.textView);//text1?
score_text = (TextView) findViewById(R.id.textView2);
score = 0;
score_text.setText("Score: " + score);
time = 10;
Timer time_timer = new Timer();
time_timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(() -> countTimer(timer_text));
}
}, /*initial delay*/ 0, /*periodic delay*/ 1000);
Timer migrate_timer = new Timer();
migrate_timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(() -> migrate(mview, monsters));
}
}, 0, 1000);
Timer change_state_timer = new Timer();
change_state_timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(() -> changeState(mview, monsters));
}
}, 0, 1000);
}
private void countTimer(TextView timer_text) {
if (time <= 0) {
timer_text.setText("timeout");
return;
}
timer_text.setText("time: " + time);
time--;
}
private void migrate(MonsterView mview, Monsters monsters) {
monsters.migrate();
mview.invalidate();
}
private void changeState(MonsterView mview, Monsters monsters) {
monsters.changeState();
mview.invalidate();
}
/**
* Touch listener for field and monsters
*/
private static final class MonsterTouchListener implements View.OnTouchListener {
Monsters monsters;
public MonsterTouchListener(Monsters _monsters) {
monsters = _monsters;
}
@Override
public boolean onTouch(View view, MotionEvent me) {
if (time <= 0) return false;
int action = me.getAction();
int x = (int) me.getX();
int y = (int) me.getY();
if (action == MotionEvent.ACTION_DOWN) {
for (int i = 0; i < monsters.monsters.size(); i++) {
Monster monster = monsters.monsters.get(i);
if (x > monster.x - monster.r && x < monster.x + monster.r &&
y > monster.y - monster.r && y < monster.y + monster.r) {
if (monster.canBeEliminated()) clickMonster(view, i);
break;
}
}
}
return true;
}
private void clickMonster(View view, int i) {
monsters.monsters.remove(i);
score += 10;
score_text.setText("Score: " + score);
view.invalidate();
}
}
}
XMLファイル:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.oreilly.demo.android.pa.uidemo"
android:versionCode="1"
android:versionName="1.0.0" >
<application
android:theme="@style/Theme.AppCompat.Light"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:screenOrientation="portrait">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
する: はちょうどあなたがあなたのactivity_main.xmlであなたの2つのTextViewを持っており、彼らの両方が右のIDS(:IDアンドロイド)を持っていることを確認しますか? –
あなたのXMLレイアウトファイルを表示してください – Opiatefuchs
あなたがアップロードしたファイルは 'AndroidManifest.xml'で、' activity_main.xml'のコードを表示します。 – Talha