Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

25.01.2017, 21:51

Klar, hier ist ein Screenshot davon
Musste es runterskalieren weil die Dateigröße zu groß war aber man erkennt es ja offensichtlich
»Roman Wecker« hat folgendes Bild angehängt:
  • Bug.png

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

26.01.2017, 00:26

Ach, wir reden hier von solch großen Lücken!
Ich ging davon aus, dass es nur um ein Pixel Breite/Höhe geht ...
Das ist in der Tat seltsam. Hast du die neuesten Grafiktreiber?

Fischkralle

Frischling

Beiträge: 24

Wohnort: Köln

Beruf: Softwarearchitekt

  • Private Nachricht senden

13

26.01.2017, 08:38

Bescheid!!!

Ich würde gerne die Klasse BlockSystem sowie die Berechnung für den Sprung sehen.
Das es was mit der GraKa zu tun hat bezweifel ich. Wir wollen aber nichts ausschließen.
Daher würde ich das ganze einmal Exportieren (Als .jar oder Repository oder wie auch immer)
und auf einem anderen Gerät einmal testen.

Optisch zu sehen sind nur die Lücken. Interessant wäre es ob es auch Überlappungen gibt.
Folgende Angaben würden helfen:
-Wie viele Pixel ist solch eine Lücke?
-Ist jede Kachel noch mit ihrem vollen Umfang zu sehen?
-- Wenn nein, wie groß ist die Überlappung?
Geschriebene Sachen können Spuren von eigener Meinung und/oder Sarkasmus enthalten.

14

26.01.2017, 14:38

Ach, wir reden hier von solch großen Lücken!
Ich ging davon aus, dass es nur um ein Pixel Breite/Höhe geht ...
Das ist in der Tat seltsam. Hast du die neuesten Grafiktreiber?


Bescheid!!!

Ich würde gerne die Klasse BlockSystem sowie die Berechnung für den Sprung sehen.
Das es was mit der GraKa zu tun hat bezweifel ich. Wir wollen aber nichts ausschließen.
Daher würde ich das ganze einmal Exportieren (Als .jar oder Repository oder wie auch immer)
und auf einem anderen Gerät einmal testen.

Optisch zu sehen sind nur die Lücken. Interessant wäre es ob es auch Überlappungen gibt.
Folgende Angaben würden helfen:
-Wie viele Pixel ist solch eine Lücke?
-Ist jede Kachel noch mit ihrem vollen Umfang zu sehen?
-- Wenn nein, wie groß ist die Überlappung?


Also an den Grafikkartentreiber wird es nicht liegen, vermute ich. Das Problem tritt auch auf anderen Geräten auf.
Noch zu David Scherfgens Antwort: Ein Block hat eine Primärauflösung von 100 Pixeln. Da mein alter Latop Bildschirm
die Auflösung 1366x768 hatte wurde das Spiel zunächst dafür optimiert. Mittlerweile besitze ich einen Laptop mit 4K
Auflösung, aber ich habe die Auflösung runtergestellt auf 1920x1080, d.h. die Lücken werden zunächst etwas kleiner
gezeichnet und dann noch hochskaliert. Aber größer als +-1 Pixel müssen sie dann schon sein.
Zu Fischkralle: Überlappungen existieren gar nicht wie man es auch mehr oder minder auf dem Screenshot sehen kann
wird jede Kachel trotzdem vollständig gezeichnet. Nur ein größerer Block von Kacheln verschiebt sich dann um den Wert
der Lücke. Und wie groß so eine Lücke ist variiert jedes Mal das kann man nicht sagen. Mal ist sie kleiner mal größer
die auf dem Screenshot war ein echtes Prachtexemplar xD Die sind auch nicht zwangsweise waagrecht es gibt sie auch in
vertikaler Richtung. Dann gibts jetzt im Anschluss noch ein bisschen Code

Das hier ist die Fallphysik in der Klasse BlockSystem

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
if(speed>0){
                boolean bewegt=false;
                int lastX=Jack.x;;
                for(int i=0;i<speed;i++){
                    if(bewegt==false){
                        Jack.bewegungsversuch();
                        if(lastX!=Jack.x){
                            bewegt=true;
                        }
                        else if(i+1==(int)speed&&bewegt==false&&gesprungen==true){
                            Jack.animiereBild();
                        }
                    }
                    if(Jack.amLeben==true&&Jack.entered==false){
                        if(Jack.y+100/100<0){
                            if(i==0&&speed<maxspeed){
                                speed+=0.6;
                            }
                            Jack.y+=1;
                            scroll_Y-=1;
                        }
                        else if(bloecke[(Jack.y+200)/100][(Jack.x)/100].texture==null&&bloecke[(Jack.y+200)/100][(Jack.x+99)/100].texture==null){
                            if(i==0&&speed<maxspeed){
                                speed+=0.6;
                            }
                            Jack.y+=1;
                            scroll_Y-=1;
                        }
                        else{
                            speed=1;
                            gesprungen=false;
                        }
                    }
                }
            }
            else{
                speed+=0.9;
                boolean bewegt=false;
                int lastX=Jack.x;
                for(int i=0;i<-speed;i++){
                    if(bewegt==false){
                        Jack.bewegungsversuch();
                        if(lastX!=Jack.x){
                            bewegt=true;
                        }
                        else if(i+1==(int)-speed&&bewegt==false&&gesprungen==true){
                            Jack.animiereBild();
                        }
                    }
                    if(Jack.amLeben==true&&Jack.entered==false){
                        if(Jack.y+100/100<0){
                            Jack.y-=1;
                            scroll_Y+=1;
                        }
                        else if(bloecke[(Jack.y-1)/100][(Jack.x)/100].texture==null&&bloecke[(Jack.y-1)/100][(Jack.x+99)/100].texture==null){
                            Jack.y-=1;
                            scroll_Y+=1;
                        }
                        else{
                            speed=1;
                        }
                    }
                }
            }

Fischkralle

Frischling

Beiträge: 24

Wohnort: Köln

Beruf: Softwarearchitekt

  • Private Nachricht senden

15

26.01.2017, 16:57

Hmm...
Bin aktuell unterwegs und nur mim Handy Online.
Werde mir deinen Code später mal genauer ansehen.

Zwei Fragen habe ich aber noch:
Wie ich sehe arbeitest du mit Java.
1) Welche Java Version nutzt du?
2) Sagt dir das Framework JUnit was?
Geschriebene Sachen können Spuren von eigener Meinung und/oder Sarkasmus enthalten.

16

26.01.2017, 21:23

Hmm...
Bin aktuell unterwegs und nur mim Handy Online.
Werde mir deinen Code später mal genauer ansehen.

Zwei Fragen habe ich aber noch:
Wie ich sehe arbeitest du mit Java.
1) Welche Java Version nutzt du?
2) Sagt dir das Framework JUnit was?

Hmm...
Bin aktuell unterwegs und nur mim Handy Online.
Werde mir deinen Code später mal genauer ansehen.

Zwei Fragen habe ich aber noch:
Wie ich sehe arbeitest du mit Java.
1) Welche Java Version nutzt du?
2) Sagt dir das Framework JUnit was?


Ich benutze die Java Version 1.8
JUnit sagt mir nichts. Ich habe aus einem anderen Projekt nur Erfahrung in LibGDX

Fischkralle

Frischling

Beiträge: 24

Wohnort: Köln

Beruf: Softwarearchitekt

  • Private Nachricht senden

17

26.01.2017, 22:44

JUnit ist ein Framework, mit dem einzelne Methoden auf ihre Tauglichkeit getestet werden können.
Habe mir den Code mal angesehen. Leider fehlt da noch eine ganze Menge an Infos um den Fehler finden zu können.

Es müsste noch folgendes bekannt sein:

- scroll_Y aus der BlockSystem Klasse und dessen Berechnung
- x in der Block Klasse wird deklariert aber nirgends Initialisiert. Da package private gilt wird dies wohl in einer anderen Klasse gemacht
- y in der Block Klasse wird deklariert aber nirgends Initialisiert. Da package private gilt wird dies wohl in einer anderen Klasse gemacht
- was macht die (wahrscheinlich) statische Methode bewegungsversuch() in der Klasse Jack
Geschriebene Sachen können Spuren von eigener Meinung und/oder Sarkasmus enthalten.

18

27.01.2017, 17:36

JUnit ist ein Framework, mit dem einzelne Methoden auf ihre Tauglichkeit getestet werden können.
Habe mir den Code mal angesehen. Leider fehlt da noch eine ganze Menge an Infos um den Fehler finden zu können.

Es müsste noch folgendes bekannt sein:

- scroll_Y aus der BlockSystem Klasse und dessen Berechnung
- x in der Block Klasse wird deklariert aber nirgends Initialisiert. Da package private gilt wird dies wohl in einer anderen Klasse gemacht
- y in der Block Klasse wird deklariert aber nirgends Initialisiert. Da package private gilt wird dies wohl in einer anderen Klasse gemacht
- was macht die (wahrscheinlich) statische Methode bewegungsversuch() in der Klasse Jack

JUnit ist ein Framework, mit dem einzelne Methoden auf ihre Tauglichkeit getestet werden können.
Habe mir den Code mal angesehen. Leider fehlt da noch eine ganze Menge an Infos um den Fehler finden zu können.

Es müsste noch folgendes bekannt sein:

- scroll_Y aus der BlockSystem Klasse und dessen Berechnung
- x in der Block Klasse wird deklariert aber nirgends Initialisiert. Da package private gilt wird dies wohl in einer anderen Klasse gemacht
- y in der Block Klasse wird deklariert aber nirgends Initialisiert. Da package private gilt wird dies wohl in einer anderen Klasse gemacht
- was macht die (wahrscheinlich) statische Methode bewegungsversuch() in der Klasse Jack


scroll_Y wird an mehreren Stellen berechnet, an den folgenden und der bereits bekannten Stelle vom letzten Code Ausschnitt

Quellcode

1
        int scroll_Y;


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (TASTE_HOCH==true&&Jack.y>0&&Jack.amLeben==true&&Jack.entered==false){
                if(bloecke[(Jack.y+199)/100][(Jack.x+101)/100].blockSort==14||bloecke[(Jack.y+199)/100][(Jack.x+101)/100].blockSort==1){  //Abfrage ob rechts neben Jack ein Block mit der blocksort 1 ist.
                    if(bloecke[(Jack.y-5)/100][(Jack.x)/100].texture==null&&bloecke[(Jack.y-5)/100][(Jack.x+99)/100].texture==null){ //Abfrage ob über Jack ein Block ist wenn nicht dann klettert er.
                        Jack.y-=20;
                        scroll_Y+=20;
                        Jack.klettert=true;
                        if(Jack.aktBild<3&&Jack.nachRechts==true){
                            Jack.aktBild++;
                        }
                        else if(Jack.aktBild>1&&Jack.nachRechts==false){
                            Jack.aktBild--;
                        }
                        else {
                            if(Jack.nachRechts==true){
                                Jack.nachRechts=false;
                            }
                            else {
                                Jack.nachRechts=true;
                            }
                        }
                    }
                }


Zitat

else if(bloecke[(Jack.y+199)/100][(Jack.x-1)/100].blockSort==13||bloecke[(Jack.y+199)/100][(Jack.x-1)/100].blockSort==1){ //Abfrage ob links neben Jack ein Block mit der blocksort 1 ist.
if(bloecke[(Jack.y-5)/100][(Jack.x)/100].texture==null&&bloecke[(Jack.y-5)/100][(Jack.x+99)/100].texture==null){ //Abfrage ob über Jack ein Block ist wenn nicht dann klettert er.
Jack.y-=20;
scroll_Y+=20;
Jack.klettert=true;
if(Jack.aktBild<3&&Jack.nachRechts==true){
Jack.aktBild++;
}
else if(Jack.aktBild>1&&Jack.nachRechts==false){
Jack.aktBild--;
}
else {
if(Jack.nachRechts==true){
Jack.nachRechts=false;
}
else {
Jack.nachRechts=true;
}
}
}
}



x und y werden in der Klasse Player (nicht Jack, Jack ist das Objekt der Klasse Player) berechnet:

Quellcode

1
        int x,y;


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
79
public void bewegungsversuch(){
            
            if(blockSys.TASTE_LINKS==true&&amLeben==true&&blockSys.TASTE_SHIFT==false){ 
                rechts=false;
                if(y<0){
                    blockSys.scroll_X+=5;
                    x-=5;
                    animiereBild();
                }
                else if(blockSys.bloecke[(y+1)/100][(x-1)/100].texture==null&&blockSys.bloecke[(y+99)/100][(x-1)/100].texture==null&&blockSys.bloecke[(y+199)/100][(x-1)/100].texture==null){
                    blockSys.scroll_X+=5;
                    x-=5;
                    animiereBild();
                }
            }
            
            else if(blockSys.TASTE_LINKS==true&&amLeben==true&&blockSys.TASTE_SHIFT==true){
    
                rechts=false;
                if(y<0){
                    blockSys.scroll_X+=10;
                    x-=10;
                    animiereBild();
                }
                else if(blockSys.bloecke[(y+1)/100][(x-10)/100].texture==null&&blockSys.bloecke[(y+99)/100][(x-10)/100].texture==null&&blockSys.bloecke[(y+199)/100][(x-10)/100].texture==null){
                        blockSys.scroll_X+=10;
                        x-=10;  
                        animiereBild();
                }
                else{
                    x=blockSys.bloecke[y/100][(x-10)/100].x+100;
                }
            }
            
            else if(blockSys.TASTE_RECHTS==true&&amLeben==true&&blockSys.TASTE_SHIFT==false){           
                rechts=true;        
                if(y<0){
                    blockSys.scroll_X-=5;
                    x+=5;
                    animiereBild();
                }
                else if(y<100&&blockSys.bloecke[(y+199)/100][(x+100)/100].texture==null){
                    blockSys.scroll_X-=5;
                    x+=5; //Die Abfrage kannst du löschen wenn du die Level so baust das der Spieler nicht nach oben raus kann
                    animiereBild();
                }
                else if(blockSys.bloecke[(y+1)/100][(x+99)/100].texture==null&&blockSys.bloecke[(y+99)/100][(x+100)/100].texture==null&&blockSys.bloecke[(y+199)/100][(x+100)/100].texture==null){
                    blockSys.scroll_X-=5;
                    x+=5;
                    animiereBild();
                }
            }
            
            else if(blockSys.TASTE_RECHTS==true&&amLeben==true&&blockSys.TASTE_SHIFT==true){
                rechts=true;
                if(y<0){
                    blockSys.scroll_X-=10;
                    x+=10;
                    animiereBild();
                }
                else if(y<100&&blockSys.bloecke[(y+199)/100][(x+100)/100].texture==null){
                    blockSys.scroll_X-=10;
                    x+=10; //Die Abfrage kannst du löschen wenn du die Level so baust das der Spieler nicht nach oben raus kann
                    animiereBild();
                }
                else if(blockSys.bloecke[(y+1)/100][(x+110)/100].texture==null&&blockSys.bloecke[(y+99)/100][(x+110)/100].texture==null&&blockSys.bloecke[(y+199)/100][(x+110)/100].texture==null){
                    blockSys.scroll_X-=10;
                    x+=10;
                    animiereBild();
                }
                else{
                    x=blockSys.bloecke[y/100][(x+110)/100].x-100;
                }
            }
            
            else if(klettert==false){
                aktBild=1;
            }
        }

Fischkralle

Frischling

Beiträge: 24

Wohnort: Köln

Beruf: Softwarearchitekt

  • Private Nachricht senden

19

27.01.2017, 23:31

Es tut mir leid aber mir fehlt immer noch die Berechnung von y aus der Block Klasse. In bewegungsversuch() wird nur der x Wert gesetzt.
Wäre gut, wenn du einfach alle Klassen, die mit der Bewegung zu tun haben mal raus geben könntest.
Genial wäre ein Repository auf GitHub oder so....
Geschriebene Sachen können Spuren von eigener Meinung und/oder Sarkasmus enthalten.

20

29.01.2017, 17:18

Ich habe eine Dropbox geöffnet mit den Klassen BlockSystem, Block und Player. Dann sind mal die ganzen Codeabschnitte zusammenhängend.

https://www.dropbox.com/sh/x8atg2cibx08x…e4o4bBa-wa?dl=0

Freue mich über weitere Antworten danke!

Werbeanzeige