Spielerauswahl funktioniert nicht

  • 4 Antworten
  • Neuester Beitrag
Diskutiere Spielerauswahl funktioniert nicht im Android Spiele Entwicklung im Bereich Android App Entwicklung.
R

Ratzefummel321

Neues Mitglied
Hallo liebe Community. Ich habe folgendes Problem :

Ich bin grade dabei eine Multiplayerapp fuers Tablet zu Programmieren. Die App enthält eine Spielerauswahl in der beide Spieler zwischen 2 Charakteren wählen sollen. (rotes Team, blaues Team)

Die spieler können mit Buttons nach links und rechts die Charaktere durschalten und muessen, wenn sie sich für einen Charakter entschieden haben , dies mit einer Checkbox bestätigen. Die Charaktere werden auch als Bildchen dargestellt, die durchgeschaltet werden und unter den Bildchen sind dann die Checkboxen die sich halt mit den bildern ändern. Sprich wenn Spieler1 das blaue Team wählt muss links das blaue männchen stehen und wenn spieler 2 das rote männchen wählt muss rechts das rote männchen stehen. Wir haben aber probleme und wissen nicht mehr weiter.

Die Figuren werden in der SpielviewActivity gezeichnet.
Die Checkboxen und der Play Button der in die SpielView weiter leitet sind aber in der SpielerActivity.

Im moment haben wir halt versucht die beiden activitys miteinander zu verbinden sodass die Spielview klasse auf die checkboxen zugreifen kann aber das funktioniert nicht es stürzt immer wieder ab obwohl er keine fehler anzeigt :(

hier mal der Code ( gekürzt)

SpielerActivity:

Code:
public class SpielerActivity extends Activity implements OnClickListener{
    
    private Button zumSpiel;
    public ImageView skullLinkerSpieler;
    private ImageView skullRechterSpieler;
    public SpielView spiel;
    public CheckBox player1blueTeam;
    public CheckBox player1RedTeam;
    public CheckBox player2BlueTeam;
    public CheckBox player2RedTeam;
    
   @Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spielerauswahl);
        
        zumSpiel = (Button)findViewById(R.id.spiel);
        zumSpiel.setOnClickListener(this);
        
        skullLinkerSpieler = (ImageView)findViewById(R.id.skull);
        skullRechterSpieler = (ImageView)findViewById(R.id.skull2);
        
        player1blueTeam = (CheckBox)findViewById(R.id.leftTeam);
        
        player2BlueTeam = (CheckBox)findViewById(R.id.rightBlueTeam);
        player2BlueTeam = (CheckBox)findViewById(R.id.rightRedTeam);
        
        
        
    }
        
            
        
            @Override
            public void onClick(View v) {
                
            if (v.getId()== R.id.spiel){
            
                if(player1blueTeam.isChecked()){
                    
                    System.out.println("blau 1 hallo");
                   
                }
            
                 setContentView(new SpielView(this));
            
            }
            else if (v.getId()==R.id.links1){
                
                skullLinkerSpieler.setImageResource(R.drawable.hai);
            }
            else if (v.getId()==R.id.rechts1){
                
                skullLinkerSpieler.setImageResource(R.drawable.punk);
            }
       }
}
Spielview:


Code:
public class SpielView extends View implements OnTouchListener{
    
    Figur figur,figur2;
    boolean Ausgewählt = false;
    boolean F2Ausgewählt = false;
    public SpielerActivity sp;
    
    public SpielView (Context context){
            
         super(context);
         
         figur = new Figur(BitmapFactory.decodeResource(getResources(), R.drawable.laufanimation), 1100, 350);
         figur2 = new Figur(BitmapFactory.decodeResource(getResources(), R.drawable.laufanimation2), 10, 350);
         
        setBackgroundResource(R.drawable.game_background);
         setOnTouchListener(this);
           
            
     }
     
    
    
    public void onDraw(Canvas canvas){
        
        figur1.draw(canvas);
        figur2.draw(canvas);
        invalidate();
}

   
   
@Override
public boolean onTouch(View v, MotionEvent event ) {
    
    

 if (PositionX().contains((int)event.getX()) && (PositionY().contains((int)event.getX()))){
        
        Ausgewählt = true;
        F2Ausgewählt = false;
    }
    
    
    
    
        
    if ((int)event.getX() < figur.getX() && Ausgewählt == true ){
         
         figur.setX(-10);
         figur.setfeld(1);
         figur.update();
     }
         
         else if((int)event.getX() > figur.getX() ){
             
            figur.setX(10);
            figur.setfeld(1);
            figur.update();
         
         }
    
    
    if (F2PositionX().contains((int)event.getX()) && (F2PositionY().contains((int)event.getX()))){
        
        Ausgewählt = false;
        F2Ausgewählt = true;
        
    }
    
    
    
    
        
    if ((int)event.getX() < figur2.getX() && F2Ausgewählt == true ){
         
         figur2.setX(-10);
         figur2.setfeld(1);
         figur2.update();
     }
         
         else if((int)event.getX() > figur2.getX() && F2Ausgewählt == true ){
             
            figur2.setX(10);
            figur2.setfeld(1);
            figur2.update();
         
         }
    
   return false;
}

}
LogCat ist auch dabei. Es wäre super, wenn sich jemand Zeit dafür nehmen könnte.

Gruß.

Ratze
 

Anhänge

  • logCat.pdf
    17 KB Aufrufe: 86
markus.tullius

markus.tullius

Experte
Da der Code nicht vollständig ist, und ich keine Nummerierung habe, kann ich dir nur ungefähr sagen, wo dein Fehler ist.

Laut deiner Fehlermeldung ist im SpielView in Zeile 44 ein NullpointerException. Wahrscheinlich rufst du ein Methode von einem Objekt auf, das null ist (Es gibt keine Instanz vom Objekt).


Code:
[FONT=Consolas]05-26 15:10:47.640: E/AndroidRuntime(9155): FATAL EXCEPTION: main
05-26 15:10:47.640: E/AndroidRuntime(9155): [B]java.lang.NullPointerException 
[/B]05-26 15:10:47.640: E/AndroidRuntime(9155): at com.example.flunky.SpielView.<init>([B]SpielView.java:44[/B])
[/FONT]
https://www.android-hilfe.de/forum/...ng.9/nullpointerexception-was-tun.522368.html
 
R

Ratzefummel321

Neues Mitglied
Danke für deine Antwort. Das Problem habe ich slebst bereits gelöst. Die Variablen in der SpielerActivity musste ich alle auf static machen um in der Spielview darauf zugreifen zu können. Warum das so ist verstehe ich nicht so ganz. Bzw. habe ich schon immer Probleme mit static, weil ich´s einfach nicht kapiere:confused2:
Vielleicht kann mir das ja jemand erklären?!:unsure:
 
A

amfa

Experte
Da fehlts an den Grundlagen.
Static bedeutet das die Variable zur Klasse gehört und nicht zu einem Objekt.

Beispiel
Code:
public class Auto {

	static String staticKennzeichen = "XX -XX 1234";
	String kennzeichen;

	public Auto(String newKennzeichen) {
		kennzeichen = newKennzeichen;
	}

	public static void main(String... args) {
		// Gibt XX -XX 1234 aus, direkt aus der Klasse ohne ein Objekt zu
		// erzeugen
		System.out.println(Auto.staticKennzeichen);

		// Erstellt 2 verschiedene Objekte von der Klasse Auto
		Auto auto1 = new Auto("YY - YY 4321");
		Auto auto2 = new Auto("ZZ - ZZ 9876");

		// Gibt YY - YY 4321 aus
		System.out.println(auto1.kennzeichen);
		// Gibt XX -XX 1234 (Eclipse meldet hier auch eine Warnung
		// Auto.staticKennzeichen wäre nämlich richtig)
		// The static field Auto.staticKennzeichen should be accessed in a
		// static way
		System.out.println(auto1.staticKennzeichen);

		// Gibt ZZ - ZZ 9876 aus
		System.out.println(auto2.kennzeichen);
		// Gibt XX -XX 1234
		// The static field Auto.staticKennzeichen should be accessed in a
		// static way
		System.out.println(auto2.staticKennzeichen);

		// setzt staticKennzeichen auf einen neuen Wert
		// Allerdings nicht nur in auto2
		auto2.staticKennzeichen = "VV - VV 6789";

		// Gibt BEIDE MALE VV - VV 6789 aus
		System.out.println(auto1.staticKennzeichen);
		System.out.println(auto2.staticKennzeichen);
	}
}
Static gehört also immer zu einer Klasse und existiert nur einmal.
"normale" Variablen gehören immer zu einem Objekt das erzeugt wird.
Das wird vorallem dann interessant wenn ich jetzt in dem Code oben noch ein Auto erzeuge:
Auto auto3 = new Auto("DD - DD 4567")
auto3.staticKennzeichen gibt dann nämlich VV - VV 6789 aus.
Jedes weitere Auto das du erzeugst hat dann dort dieses "statische" Kennzeichen drin stehen bis du es wieder änderst, dann haben ALLE Autos dieses kennzeichen.

Statisch Variablen sind falsch, wenn es um Werte geht die nicht zur Klasse gehören sondern zu einem Objekt.
In deinem Beispiel solltest du eine vielleicht Klasse Spieler anlegen, die die Werte die du brauchst speicherst.
Dieses Objekt kannst du dann beim Aufruf der Spielview mitgeben. (vermutlich per Intent, dann in die Intent Extras mit reinpacken), dann kannst du in deiner SpielView auf das Objekt spieler zugreifen (oder spieler1 und spieler2 z.b. wenn es mehrere gibt).

So wäre es vermutlich richtig.
Bevor du an deinem Spiel weiter arbeitest solltest du dir mal die Grundlagen von Java bzw objektorientiertet Programmierung aneignen.
Galileo Computing :: Java ist auch eine Insel - 3 Klassen und Objekte