Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

1

Mittwoch, 27. Oktober 2010, 23:43

Problem mit IF

Hi!
Ich brauche Hilfe. Wenn ich F4 drücke erscheint eine Messagebox und boolean "msgBox" wird auf true gesetzt.
Jetzt habe ich die Abfrage:
Spoiler

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
if(schalter.msgBox)
                         {
                             schreibe("MSGBOX= ",schalter.msgBox);
                             schreibe("Textbox= ",schalter.textbox);
                             schreibe("Enter gedrueckt= ",steuerung.ENTER);
                          if(steuerung.ENTER)
                          {
                           schalter.textbox=false;
                           schalter.msgBox=false;
                           steuerung.ENTER=false;
                           }
 
                         }
zum Lesen den Text mit der Maus markieren


So das Problem ist obwohl msgBox trueist, komm ich nicht in die Schleife rein! Das heißt diese schreibe(); werden nichtmal ausgegeben!
Ich hab mir auch schon vorher msgBox printen lassen und er sagt das sie true ist. Aber wieso zum Teufel wird die Schleife nicht aktiviert?

Denn deswegen bleibt bei mir die Messagebox immer stehen und verschwindet nicht was sie ja tun soll wenn man Enter drückt.
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

2

Donnerstag, 28. Oktober 2010, 07:32

Hejho,
ein bissel mehr Code wäre hilfreich, zumindest die Schleife noch, weil so ganz werde ich aus dem Problem nicht schlau. Wie setzt du die MessageBox um, mit JOptionPane? Mit JWindow, oder wie? schreibe schreibt nur auf die Standardkonsole? Wie ist die Schleifenbedingung?

Grüße Steve
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

3

Donnerstag, 28. Oktober 2010, 12:44

Also es geht um mein Spiel.
Die eine Schleife ist in der Klasse SpielSchleife.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void run()
	{
		while(true)
		{
                  if(schalter.msgBox)
                         {
                             schreibe("MSGBOX= ",schalter.msgBox);
                             schreibe("Textbox= ",schalter.textbox);
                             schreibe("Enter gedrueckt= ",steuerung.ENTER);
                          if(steuerung.ENTER)
                          {
                           schalter.textbox=false;
                           schalter.msgBox=false;
                           steuerung.ENTER=false;
                            }
                           }
 
                       ...
 
     }
}


Dann in SpielAnsicht.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void run()
    {
        while(true)
        {
 
 
            try
            {
                float START = System.currentTimeMillis();
                repaint();
 
                float AUSFUEHR = System.currentTimeMillis()-START;
 
                if(33 > (int)AUSFUEHR)
                {
                    Thread.sleep(33-(int)AUSFUEHR);
                }
            }
            catch(Exception e){}
        }
    }


Und in der Paint Methode dann.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
...
 
else if(schalter.MapBewegung) //Map wird gezeichnet
               {
 
                    if(schalter.textbox==false) //Wenn keine Nachricht erscheint
                    {
                             uebergang(g);
                             ansicht(g);
                             MapLayer1(g);
                             zeichneSpieler(g);
                             MapLayer2(g);
                    }
 
 
 
           if(steuerung.F4) //Nur zum testen
               {
                   schalter.textbox=true; //Spielgeschehen wird angehalten
                   callMsg("Wer das liest ist ", "dumm! Haha :P" ,g);
                   steuerung.F4=false;
                }
 
 
               }


callMSG

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void callMsg(String msg,String msg2, Graphics g)
     {
 
        g.setFont(new Font("Manaspace Regular", Font.ITALIC|Font.PLAIN, 26));
        g.setColor(Color.white);
 
        schalter.msgBox=true; //Hier wird er auf true gesetzt was ja auch klappt bei der Ausgabe!!
 
        g.drawImage(Nachricht, 60, 400, null);
        g.drawString(msg,90,440);
        g.drawString(msg2,90,480);
 
         schreibe("MSGBox= ",schalter.msgBox); //Wird true angezeigt.
     }


So die Nachricht erscheint auf dem Bildschirm und ich kann mich nicht mehr auf der Map bewegen. Aber ich kann sie auch nicht mit Enter wegdrücken obwohl es doch eigentlich gehen müsste? Ich muss irgentwas übersehen haben.

Wenn du Lust hast kann ich dir ja mein ganzes Projekt schicken und du versuchst da mal zu schauen.
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

Motto: ich bin der brennende schinken

  • Nachricht senden

4

Freitag, 29. Oktober 2010, 14:10

Könnte es daran liegen das du in der repaint methode f4 halten musst damit er dir die box anzeigt, du jedoch f4 auf false setzt?
Dein code ist ein reines durch einander >.<
schreibe() = System.out.println() ???
;( :jagen:

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

5

Freitag, 29. Oktober 2010, 15:07

Nein ich drücke einmal F4 und das Fenster erscheint. Normalerweise brauche ich jetzt nur Enter drücken und ich kann normal weiterspielen.
Aber er kommt in die eine Schleife nicht rein obwohl MsgBox true ist und obwohl ich es doch abfrage...

PS: Ja schreibe() => system.out.println().
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

Motto: ich bin der brennende schinken

  • Nachricht senden

6

Freitag, 29. Oktober 2010, 15:41

Kannst du die klasse bitte komplet posten?
Im moment denk ich mir das so:
Du hast 2 While schleifen, doch die msgBox ist in der anderen und du kommst aus der einen nicht raus.
Sollte auf diesen weg funktionieren:

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  String msg="";
  String msg2="";
  boolean msgBox=false;
  java.awt.image.BufferedImage Nachricht = new java.awt.image.BufferedImage(10,10,0);
  boolean F4=false;
  boolean ENTER=false;
  public void run(){
    while(true){
      try{
        long START = System.currentTimeMillis();
        repaint();
        update();
        long AUSFUEHR = System.currentTimeMillis()-START;
        if(33 > (int)AUSFUEHR){ // btw. 33 sind 30fps, 16 sind 60fps
          Thread.sleep(33-(int)AUSFUEHR);
        }
      }
      catch(Exception e){}
    }
  }
  @Override
  public void paint(java.awt.Graphics g){
    if(msgBox){
        g.setFont(new java.awt.Font("Manaspace Regular", java.awt.Font.ITALIC|java.awt.Font.PLAIN, 26));
        g.setColor(java.awt.Color.white);
        msgBox=true; //Hier wird er auf true gesetzt was ja auch klappt bei der Ausgabe!!
        g.drawImage(Nachricht, 60, 400, null);
        g.drawString(msg,90,440);
        g.drawString(msg2,90,480);
    }
  }
  private void update(){
    if(!msgBox && F4){
      msgBox=true;
      msg="Wer das liest ist";
      msg2="dumm! haha :P";
      F4=false;
    }else if(msgBox && ENTER){
      msgBox=false;
      ENTER=false;
    }
  }
;( :jagen:

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

7

Freitag, 29. Oktober 2010, 16:07

Danke es klappt!!
Dafür bekommst du auch deine Kekspunkte =)
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

8

Freitag, 17. Dezember 2010, 18:36

So Leute, vielleicht könnt ihr mir ja wieder helfen.
Mein Gehirn ist nicht fähig es zu verstehen, meine Logik sagt mir das es gehen muss.

Es wird eine boolean Variable nicht aktiviert. Warum weiss ich nicht.
Ich post mal alle Methoden die damit zusammenhängen.

Klasse SpielSchleife

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void run()
	{
		while(true)
		{
                        //============================================================================//
			float START = System.currentTimeMillis();
 
                        ...
                       Update();
                        ...
 
			float AUSFUEHR = System.currentTimeMillis()-START;
			if(MAX_GAME_SPEED>AUSFUEHR)
			{
			  try {Thread.sleep(MAX_GAME_SPEED-(int)AUSFUEHR);} catch (InterruptedException e) {e.printStackTrace();}
			}
		}
 
	}

Update

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void Update()
        {
 
            System.out.println(""+schalter.map2);  //Gibt false aus warum auch immer.
 
                          if(schalter.map2)
                               {
 
                                if(schalter.kollisionWechsel){
                                 System.out.println("Ja es geht");
                                 setKollision("files/Maps/Map2.png");
                                 setBlocked();
                                 loadCollision();
                                }
 
                               }
 
          }


Jetzt in SpieleAnsicht

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 public void run()
    {
        while(true)
        {
 
 
            try
            {
                float START = System.currentTimeMillis();
                repaint();
Update();
 
 
                float AUSFUEHR = System.currentTimeMillis()-START;
 
                if(80 > (int)AUSFUEHR)
                {
                    Thread.sleep(80-(int)AUSFUEHR);
                }
            }
            catch(Exception e){}
        }
    }


Update der betreffene Abschnitt

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
 
//Mapwechsel
          if(schalter.player_x == 375 && schalter.player_y == 482 && schalter.map1) 
              {                                                 
 
                schalter.map2=true;  //Er wird doch auf true gesetzt?!!!
                 schalter.kollisionWechsel=true;  //Aktivieren um Kollision zu laden
                 tilemap = new TiledMap("Maps/Map2.tmx"); //Map auswählen
                 //Neue Koordinaten eingeben
                 schalter.player_x=280;
                 schalter.player_y=272;
 
                  schalter.map1=false;  //Vorige Map deaktivieren               
 
               }
 
...
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

9

Freitag, 17. Dezember 2010, 19:19

An dem bissel Code lässt sich schlecht ablesen wo das Problem ist. Ich rate einfach mal, dass der Switch zwar auf true gesetzt wird, dann aber im nächsten Moment wieder bei einer anderen Abfrage auf false zurückgesetzt wird.

Du willst doch aber sowieso nicht für jede Map einen eigenen Boolean anlegen, oder? oO Das ist eher gefährlich, weil dann unter Umständen sogar mehrere Maps aktiv sein könnten. Leg eine int-Variable an, die angibt auf welcher Map man sich befindet. Das hat auch den Vorteil, dass du zumindest nachprüfen kannst, auf welcher Map der Spieler gerade ist, wenn er schon nicht dort ist, wo du ihn haben willst.
Was ich mir auch fehleranfällig vorstelle sind deine beiden While-Schleifen SpielSchleife und SpielAnsicht. Warum packst du das nicht in eine Schleife, statt zwei Threads parallel laufen zu lassen?
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

10

Samstag, 18. Dezember 2010, 16:48

Zitat

An dem bissel Code lässt sich schlecht ablesen wo das Problem ist. Ich
rate einfach mal, dass der Switch zwar auf true gesetzt wird, dann aber
im nächsten Moment wieder bei einer anderen Abfrage auf false
zurückgesetzt wird.
Ok ich werd den Code nochmal durchschauen, zur Not lad ich die ganze Klasse hoch ist aber sehr viel.

Zitat

Du willst doch aber sowieso nicht für jede Map einen eigenen Boolean
anlegen, oder? oO Das ist eher gefährlich, weil dann unter Umständen
sogar mehrere Maps aktiv sein könnten. Leg eine int-Variable an, die
angibt auf welcher Map man sich befindet.
Hatte ich erst vor :D Aber hast Recht is wären ja viel zu viele. Meinst du z.B. so int mapID. If(mapID==1) heißt dann map 1?

Zitat

Was ich mir auch fehleranfällig vorstelle sind deine beiden
While-Schleifen SpielSchleife und SpielAnsicht. Warum packst du das
nicht in eine Schleife, statt zwei Threads parallel laufen zu lassen?
Ich hatte vor zwei Jahren schonmal versucht ein Spiel zu machen und habe mit Kumas Tutorial angefangen. Dort hatte er auch zwei Threads benutzt und ich hab das wohl übernommen.
EDIT: Sollte ich das also lieber ändern? Ist das besser?

Ich gucke nachher nochmal ob ich die boolean wieder ausschalte und wenn ich nichts finde editier ich hier nochmal.


EDIT: So Leute ich habs geschafft. Habe die boolean in int umgeändert und dann ging es o_O"
Man wie geil jetzt ist das Grundgerüst fast fertig.
Jetzt versuch ich NPCs/Truhen einzubauen.
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Yuber« (18. Dezember 2010, 16:47)


Social Bookmarks