Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

1

Donnerstag, 17. Februar 2011, 13:30

Animation der Bewegung - Unschön

Hi ich wieder.
Hab 1-2 Probleme bei der Bewegung des Helden bzw die Animation davon.
Wenn man normal läuft ist es ok.
1)
Aber wenn man z.B rechts drückt und dann ganz schnell nach dem loslassen links schwebt der Charakter 1-2 Sekunden bevor er wieder läuft.
Geht in jede Richtung.
2) Man drückt z.B. rechts und gleichzeitig unten dann schwebt der Charakter nach recht uns guckt nach unten...
Werde nachher nochmal ein Video hochladen allerdings weiss ich nicht ob man es bei meinen scheiss Rechner gut erkennt.

Kennt ihr das Problem? Wie man Nr 2 löst wüsst ich vielleicht.

Den Code benutze ich.
Spoiler: Steuerung

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 switch(e.getKeyCode())
        {
 
 
              case KeyEvent.VK_UP:
			UP=true; //VERHINDERT DAS SCHRÄG GEHEN
                        letzteRichtung=3;
                         bewegung=true;
                        break;
 
 
		case KeyEvent.VK_DOWN:
			DOWN=true;
                        letzteRichtung=0;
                        bewegung=true;
                          break;
 
		case KeyEvent.VK_LEFT:
			LEFT=true;
                        letzteRichtung=1;
                        bewegung=true;
			break;
 
		case KeyEvent.VK_RIGHT:
			RIGHT=true;
                        letzteRichtung=2;
                         bewegung=true;
			break;
 
                case KeyEvent.VK_ENTER:
                        ENTER = true;
                         break;
 
               case KeyEvent.VK_F4:
                          F4=true;
                           break;
 
               case KeyEvent.VK_ALT:
                          ALT=true;
                           break;
        }
    }
 
    public void keyReleased(KeyEvent e)
    {
        switch(e.getKeyCode())
        {
        case KeyEvent.VK_UP:
			UP=false;
                      bewegung=false;
			break;
 
		case KeyEvent.VK_DOWN:
			DOWN=false;
                        bewegung=false;
                         break;
 
		case KeyEvent.VK_LEFT:
			LEFT=false;
                        bewegung=false;
                         break;
 
		case KeyEvent.VK_RIGHT:
			RIGHT=false;
                        bewegung=false;
                        break;
 
		case KeyEvent.VK_ENTER:
                      ENTER = false;
                        break;
                 case KeyEvent.VK_F4:
                          F4=false;
                         break;
                 case KeyEvent.VK_ALT:
                          ALT=false;
                         break;
        }
    }

zum Lesen den Text mit der Maus markieren


Spoiler: CharakterZeichnen

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
public void zeichneSpieler(Graphics g)
     {
 
 
                if(steuerung.bewegung) animation+=0.33;
		else animation=0.0f;
 
		if((int)animation ==2 ) animation=0.0f;
 
                if(steuerung.bewegung)g.drawImage(getMoveAnimation(), schalter.player_x,schalter.player_y,null);
 
 
        //Ermittelt die letzte Blickrichtung des Spielers
 
                else if(steuerung.letzteRichtung==0)
                  g.drawImage(sp.kenUnten, schalter.player_x,schalter.player_y,null);
                else if(steuerung.letzteRichtung==3)
                  g.drawImage(sp.kenOben, schalter.player_x,schalter.player_y,null);
                else if(steuerung.letzteRichtung==2)
                  g.drawImage(sp.kenRechts, schalter.player_x,schalter.player_y,null);
                else
                    g.drawImage(sp.kenLinks, schalter.player_x,schalter.player_y,null);
            }
 
 public BufferedImage getMoveAnimation()
        {
         return sp.ken.getSubimage(((int)animation)*48, steuerung.letzteRichtung*64, 48, 64);
 
        }

zum Lesen den Text mit der Maus markieren


Spoiler: Bewegung

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 public void Bewegung()
    {
     if(steuerung.RIGHT && schalter.player_x<Kollision.getWidth()-40 && blocked[schalter.player_x+46][schalter.player_y+48] ==false && blocked[schalter.player_x+48][schalter.player_y+61] ==false  )
     {
         ans.p.x=ans.p.x-16;
         schalter.player_x=schalter.player_x+16;
     }
     else if(steuerung.LEFT && schalter.player_x>0 && blocked[schalter.player_x][schalter.player_y+46] ==false && blocked[schalter.player_x][schalter.player_y+61] ==false)
     {
         ans.p.x=ans.p.x+16;
         schalter.player_x=schalter.player_x-16;
     }
     else if(steuerung.DOWN && schalter.player_y<Kollision.getHeight()-80 && blocked[schalter.player_x+10][schalter.player_y+64] ==false && blocked[schalter.player_x+38][schalter.player_y+64] == false)
     {
         ans.p.y=ans.p.y-16;
         schalter.player_y=schalter.player_y+16;
     }
     else if(steuerung.UP && schalter.player_y>8 && blocked[schalter.player_x+10][schalter.player_y+28] ==false && blocked[schalter.player_x+38][schalter.player_y+28] ==false)
     {
         ans.p.y=ans.p.y+16;
         schalter.player_y=schalter.player_y-16;
     }

zum Lesen den Text mit der Maus markieren
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

2

Donnerstag, 17. Februar 2011, 15:59

überprüfst du vor erneuter möglicher eingabe einer bewegung ob die alte abgeschlossen ist?
Wenn nein dann wirst du es tuen und dadurch kannst du auch abfangen das man sich dreht beim bewegen da du die richtung beim starten festlegen wirst.
du benutzt andauernd variablen wie "schalter" was soll das sein?

Kannst dir auch zur not den code vom Maker anschauen, dort funktioniert es immerhin auch so wie es soll.
;( :jagen:

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

3

Donnerstag, 17. Februar 2011, 21:31

Also es funktioniert jetzt. Allerdings gibt es noch einen Makel. Wenn man zu schnell die Richtungstaste wechselt wartet er eine Sekunde bis er weitergeht. Die Variable wird wohl nicht schnell genug auf false gesetzt. Vielleicht hab ich es auch einfach schlecht eingefügt und ihr wisst eine bessere Methode?

So hab ich es jetzt gemacht:
Spoiler

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
public void keyPressed(KeyEvent e)
    {
       switch(e.getKeyCode())
         {
 
              case KeyEvent.VK_UP:
                     if(benutzt==false){
			UP=true; //VERHINDERT DAS SCHRÄG GEHEN
                        benutzt=true;
                        letzteRichtung=3;
                         bewegung=true;
                     }
                         break;
 
 
		case KeyEvent.VK_DOWN:
                    if(benutzt==false){
			DOWN=true;
                        benutzt=true;
                        letzteRichtung=0;
                        bewegung=true;
                    }
                          break;
 
public void keyReleased(KeyEvent e)
    {
        switch(e.getKeyCode())
        {
        case KeyEvent.VK_UP:
			UP=false;
                        benutzt=false;
                      bewegung=false;
			break;
 
		case KeyEvent.VK_DOWN:
			DOWN=false;
                         benutzt=false;
                        bewegung=false;
                         break;
zum Lesen den Text mit der Maus markieren
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

Donnerstag, 17. Februar 2011, 21:48

schau einfach ob er auf einen ganzen feld steht, kA wie dein raster für das spiel ist
;( :jagen:

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

5

Freitag, 18. Februar 2011, 14:48

Was meinst du damit?
Bei mir bewegt er sich immer halbe Felder vorwärts. Also 16 Pixel jeweils.
Soll ich dann prüfen ob der Spieler auf den Koordinaten 16x oder ein vielfaches davon steht?
Und wenn er das nicht tut dann benutzt auf true setzen?
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!

Ähnliche Themen

Social Bookmarks