2016-12-14 1 views
0

私はmosnstersをグリッドの周りを動かし、脆弱な状態と安全な状態を交互にするゲームを作成しています。android studioがfindByViewId変数を解決しない

私の問題は、私はタイマーやスコアのための私の見解は私のビューを更新したいですが、私のプログラムが何らかの理由でscore_texttimer_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> 

+0

する: はちょうどあなたがあなたのactivity_main.xmlであなたの2つのTextViewを持っており、彼らの両方が右のIDS(:IDアンドロイド)を持っていることを確認しますか? –

+0

あなたのXMLレイアウトファイルを表示してください – Opiatefuchs

+0

あなたがアップロードしたファイルは 'AndroidManifest.xml'で、' activity_main.xml'のコードを表示します。 – Talha

答えて

0

あなたのAndroidManifest.xmlファイルはここに助けることができません。あなたが問題に直面しているライン

<TextView 
    android:text="TextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="150dp" 
    android:id="@+id/textView" 
    tools:text="Hello" 
    android:textSize="24sp" /> 

<TextView 
    android:text="TextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="150dp" 
    android:id="@+id/textView2" 
    tools:text="Hello" 
    android:textSize="24sp" /> 
+0

ありがとう!これは少し助けた –

関連する問題