Moin,
ich fange gerade an ein wenig JAVA zu programmieren. Ich habe vorher AS2, AS3, JavaScript und PHP programmiert.
Nun habe ich mit einem Spiel begonnen.
Bei diesem werden Grafiken von Fischen auf die Spielfläche per addView gepackt. Das KLappt auch ohne Probleme. Wenn ich nun jedoch versuch das gleiche mit einer anderen Grafik zu machen wird das Programm beendet:
Ich habe schon bei google gesucht, aber ich komme nicht drauf. Über eure Hilfe wäre ich euch sehr dankbar.
Hier jetzt nochmal mein ganzer Code (nur falls ihn jemand braucht) und die Log Fehler:
ich fange gerade an ein wenig JAVA zu programmieren. Ich habe vorher AS2, AS3, JavaScript und PHP programmiert.
Nun habe ich mit einem Spiel begonnen.
Bei diesem werden Grafiken von Fischen auf die Spielfläche per addView gepackt. Das KLappt auch ohne Probleme. Wenn ich nun jedoch versuch das gleiche mit einer anderen Grafik zu machen wird das Programm beendet:
Java:
ImageView welle = new ImageView(this);
welle.setImageResource(R.drawable.icon);
spielbereich.addView(welle); // WENN ICH DAS HIER AUSKOMMENTIERE GIBT ES KEINE FEHLER
Ich habe schon bei google gesucht, aber ich komme nicht drauf. Über eure Hilfe wäre ich euch sehr dankbar.
Hier jetzt nochmal mein ganzer Code (nur falls ihn jemand braucht) und die Log Fehler:
Java:
package de.projekte.fischerboot;
import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
public class GameActivity extends Activity implements Runnable,OnClickListener {
private static final int INTERVALL = 10;
private static final int ZEITSCHEIBEN = 300;
private Handler handler = new Handler();
private int runde;
private int punkte;
private int fische;
private int gefangeneFische;
private int zeit;
private float massstab;
private FrameLayout spielbereich;
private Random zufallsgenerator = new Random();
private Random zufallsfischgenerator = new Random();
private static final long HOECHSTALTER_MS=5000;
private static final String FISCH1 = "fisch1";
private static final String FISCH2 = "fisch2";
private static final String FISCH3 = "fisch3";
private static final String FISCH4 = "fisch4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
massstab=getResources().getDisplayMetrics().density;
spielStarten();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
zeit=zeit-1;
}
}, 1000, 1000);
}
private void spielStarten(){
runde=0;
punkte=0;
ImageView welle = new ImageView(this);
welle.setImageResource(R.drawable.icon);
spielbereich.addView(welle); // WENN ICH DAS HIER AUSKOMMENTIERE GIBT ES KEINE FEHLER
starteRunde();
}
private void starteRunde(){
runde=runde+1;
fische=runde*10;
gefangeneFische=0;
zeit=60;
FrameLayout flZeit=(FrameLayout)findViewById(R.id.bar_time);
flZeit.setBackgroundResource(R.color.weiss);
FrameLayout flTreffer=(FrameLayout)findViewById(R.id.bar_hits);
flTreffer.setBackgroundResource(R.color.weiss);
bildschirmAktualisieren();
handler.postDelayed(this,INTERVALL);
}
private void bildschirmAktualisieren(){
if(gefangeneFische<fische){
FrameLayout flTreffer=(FrameLayout)findViewById(R.id.bar_hits);
flTreffer.setBackgroundResource(R.color.weiss);
} else {
FrameLayout flTreffer=(FrameLayout)findViewById(R.id.bar_hits);
flTreffer.setBackgroundResource(R.color.gruen);
}
//TEXTFELDER
TextView tvPunkte = (TextView)findViewById(R.id.points);
tvPunkte.setText("PUNKTE: "+Integer.toString(punkte));
TextView tvRunde = (TextView)findViewById(R.id.round);
tvRunde.setText("RUNDE: "+Integer.toString(runde));
TextView tvHits = (TextView)findViewById(R.id.hits);
tvHits.setText(Integer.toString(gefangeneFische));
TextView tvTime = (TextView)findViewById(R.id.time);
tvTime.setText(Integer.toString(zeit));
//BALKEN
FrameLayout flTreffer=(FrameLayout)findViewById(R.id.bar_hits);
FrameLayout flZeit=(FrameLayout)findViewById(R.id.bar_time);
LayoutParams lpTreffer=flTreffer.getLayoutParams();
lpTreffer.width=Math.round(massstab*300*Math.min(gefangeneFische,fische)/fische);
LayoutParams lpZeit=flZeit.getLayoutParams();
lpZeit.width=Math.round(massstab*zeit*300/60);
}
private void zeitHerunterzaehlen(){
if(zeit<11){
FrameLayout flZeit=(FrameLayout)findViewById(R.id.bar_time);
flZeit.setBackgroundResource(R.color.rot);
} else {
FrameLayout flZeit=(FrameLayout)findViewById(R.id.bar_time);
flZeit.setBackgroundResource(R.color.weiss);
}
float zufallszahl=zufallsgenerator.nextFloat();
double wahrscheinlichkeit=fische*1.5/ZEITSCHEIBEN;
if(wahrscheinlichkeit>1){
einenFischAnzeigen();
if(zufallszahl<wahrscheinlichkeit-1){
einenFischAnzeigen();
}
} else {
if(zufallszahl<wahrscheinlichkeit){
einenFischAnzeigen();
}
}
fischeVerschwinden();
fischeBewegen();
bildschirmAktualisieren();
if(!pruefeSpielende()){
if(!pruefeRundenende()) {
handler.postDelayed(this, INTERVALL);
}
}
}
private boolean pruefeSpielende(){
if(zeit==0 && gefangeneFische<fische){
gameOver();
return true;
} else {
return false;
}
}
private boolean pruefeRundenende(){
if(zeit==0){
starteRunde();
return true;
} else {
return false;
}
}
private void fischeBewegen(){
spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
int nummer=0;
while(nummer<spielbereich.getChildCount()) {
ImageView fisch = (ImageView) spielbereich.getChildAt(nummer);
int vy = (Integer) fisch.getTag(R.id.vy);
vy=vy-1;
if(vy<=0){
if(fisch.getTag(R.id.fischart)==FISCH1){
fisch.setImageResource(R.drawable.fisch1_runter);
} else if(fisch.getTag(R.id.fischart)==FISCH2){
fisch.setImageResource(R.drawable.fisch2_runter);
} else if(fisch.getTag(R.id.fischart)==FISCH3){
fisch.setImageResource(R.drawable.fisch3_runter);
} else if(fisch.getTag(R.id.fischart)==FISCH4){
fisch.setImageResource(R.drawable.fisch4_runter);
}
}
fisch.setTag(R.id.vy, new Integer(vy));
FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) fisch.getLayoutParams();
params.topMargin -= vy*runde;
fisch.setLayoutParams(params);
nummer++;
}
}
private void einenFischAnzeigen() {
int breite=spielbereich.getWidth();
int hoehe=spielbereich.getHeight();
float zufallsfisch=zufallsfischgenerator.nextFloat();
ImageView fisch = new ImageView(this);
if(zufallsfisch<=0.25){
fisch.setImageResource(R.drawable.fisch1_hoch);
fisch.setTag(R.id.fischart, FISCH1);
} else if(zufallsfisch<=0.5){
fisch.setImageResource(R.drawable.fisch2_hoch);
fisch.setTag(R.id.fischart, FISCH2);
} else if(zufallsfisch<=0.75){
fisch.setImageResource(R.drawable.fisch3_hoch);
fisch.setTag(R.id.fischart, FISCH3);
} else {
fisch.setImageResource(R.drawable.fisch4_hoch);
fisch.setTag(R.id.fischart, FISCH4);
}
fisch.setTag(R.id.geburtsdatum, new Date());
fisch.setOnClickListener(this);
int fisch_breite = (int)Math.round(massstab*50);
int fisch_hoehe = (int)Math.round(massstab*55);
int links = zufallsgenerator.nextInt(breite-fisch_breite);
int oben = hoehe-fisch_hoehe;
int vy;
do {
vy = zufallsgenerator.nextInt(3)+14;
} while(vy==0);
vy = (int)Math.round(massstab*vy);
fisch.setTag(R.id.vy, new Integer(vy));
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(fisch_breite,fisch_hoehe);
params.leftMargin = links;
params.topMargin = oben;
params.gravity= Gravity.TOP + Gravity.LEFT;
spielbereich.addView(fisch,params);
}
private void fischeVerschwinden() {
spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
int nummer=0;
while(nummer<spielbereich.getChildCount()) {
ImageView fisch = (ImageView) spielbereich.getChildAt(nummer);
Date geburtsdatum = (Date) fisch.getTag(R.id.geburtsdatum);
long alter = (new Date()).getTime() - geburtsdatum.getTime();
if(alter > HOECHSTALTER_MS) {
spielbereich.removeView(fisch);
} else {
nummer++;
}
}
}
@Override
public void onClick(View fisch) {
gefangeneFische++;
if(fisch.getTag(R.id.fischart)==FISCH1){
punkte+=10;
} else if(fisch.getTag(R.id.fischart)==FISCH2){
punkte+=20;
} else if(fisch.getTag(R.id.fischart)==FISCH3){
punkte+=40;
} else if(fisch.getTag(R.id.fischart)==FISCH4){
punkte+=80;
}
bildschirmAktualisieren();
spielbereich.removeView(fisch);
}
@Override
public void run() {
zeitHerunterzaehlen();
}
private void gameOver() {
Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.gameover);
dialog.show();
}
}
Code:
01-11 17:13:29.593: D/AndroidRuntime(277): Shutting down VM
01-11 17:13:29.593: W/dalvikvm(277): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-11 17:13:29.603: E/AndroidRuntime(277): FATAL EXCEPTION: main
01-11 17:13:29.603: E/AndroidRuntime(277): java.lang.NullPointerException
01-11 17:13:29.603: E/AndroidRuntime(277): at de.projekte.fischerboot.GameActivity.fischeVerschwinden(GameActivity.java:216)
01-11 17:13:29.603: E/AndroidRuntime(277): at de.projekte.fischerboot.GameActivity.zeitHerunterzaehlen(GameActivity.java:119)
01-11 17:13:29.603: E/AndroidRuntime(277): at de.projekte.fischerboot.GameActivity.run(GameActivity.java:241)
01-11 17:13:29.603: E/AndroidRuntime(277): at android.os.Handler.handleCallback(Handler.java:587)
01-11 17:13:29.603: E/AndroidRuntime(277): at android.os.Handler.dispatchMessage(Handler.java:92)
01-11 17:13:29.603: E/AndroidRuntime(277): at android.os.Looper.loop(Looper.java:123)
01-11 17:13:29.603: E/AndroidRuntime(277): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-11 17:13:29.603: E/AndroidRuntime(277): at java.lang.reflect.Method.invokeNative(Native Method)
01-11 17:13:29.603: E/AndroidRuntime(277): at java.lang.reflect.Method.invoke(Method.java:521)
01-11 17:13:29.603: E/AndroidRuntime(277): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-11 17:13:29.603: E/AndroidRuntime(277): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-11 17:13:29.603: E/AndroidRuntime(277): at dalvik.system.NativeStart.main(Native Method)