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

1

02.05.2016, 17:48

[LIBGDX] Render Problem

Hallo!

Ich programmiere für meine Seminararbeit ein Top Down Rennspiel. Ich hatte vorher den Code fürs Zeichnen der Map und für das Zeichnen der Spieler in einer Klasse. Jetzt habe ich mich allerdings dafür entschieden eine Klasse fürs Zeichnen der Map (Tile Based Map) und eine fürs Zeichnen des Spielers zu erstellen. Außerdem gibt es noch die Klasse PlayState.

Klasse Playstate render Methode:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
@Override
    public void render(SpriteBatch sb) {

        sb.setProjectionMatrix(cam.combined);
        sb.begin();
        mapManager.render(sb);
        player.render(sb);
        covi.drawDebug(shapeRenderer);
        sb.end();

    }

Klasse MapManager render Methode: // Ich generiere die Karte anhand der umliegenden Kacheln

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
public void render(SpriteBatch sb) {

        for(int i=0;i<MapHeight;i++){
            for(int j=0;j<MapLength;j++) {
                if (Map[i][j] == 48) {
                    sb.draw(Gras, j * tileSize, i * tileSize, tileSize, tileSize);
                }
                else if (Map[i + 1][j] == 49 && Map[i - 1][j] == 49 && Map[i][j + 1] == 49 && Map[i][j - 1] == 49) {
                    sb.draw(Road_cross, j * tileSize, i * tileSize, tileSize, tileSize);
                }
                else if (Map[i][j - 1] == 49 && Map[i][j + 1] == 49) {
                    sb.draw(Road_left_right, j * tileSize, i * tileSize, tileSize, tileSize);
                }
                else if (Map[i - 1][j] == 49 && Map[i + 1][j] == 49) {
                    sb.draw(Road_up_down, j * tileSize, i * tileSize, tileSize, tileSize);
                }
                else if (Map[i][j - 1] == 49 && Map[i + 1][j] == 49) {
                    sb.draw(Road_left_up, j * tileSize, i * tileSize, tileSize, tileSize);
                }
                else if (Map[i][j - 1] == 49 && Map[i - 1][j] == 49) {
                    sb.draw(Road_left_down, j * tileSize, i * tileSize, tileSize, tileSize);
                }
                else if (Map[i][j + 1] == 49 && Map[i + 1][j] == 49) {
                    sb.draw(Road_right_up, j * tileSize, i * tileSize, tileSize, tileSize);
                }
                else if (Map[i][j + 1] == 49 && Map[i - 1][j] == 49) {
                    sb.draw(Road_right_down, j * tileSize, i * tileSize, tileSize, tileSize);
                }
            }
        }

    }

Klasse Player render Methode:

Quellcode

1
2
3
4
5
    public void render(SpriteBatch sb) {

        sprite.draw(sb);

    }
Das Problem besteht darin dass der Spieler nicht gezeichnet wird. Nur die Karte aber ohne den Spieler. Vielen Dank für eure Hilfe. Wenn ihr mehr Code benötigt einfach anschreiben! Danke

Roman

Komplette Player Klasse:
http://pastebin.com/y6NBEz29

Komplette PlayState Klasse:
http://pastebin.com/yrbbnapP

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Roman Wecker« (02.05.2016, 20:41)


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

02.05.2016, 22:15

Du bist dir ganz sicher, dass auch wirklich das Sprite bzw. dessen Textur richtig geladen wird? Habe gerade mal kurz in die libgdx Doku geschaut und sehe da leider keine Exception, die da bei nicht aufgefundenem File geworfen wird.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

3

02.05.2016, 23:32

Du bist dir ganz sicher, dass auch wirklich das Sprite bzw. dessen Textur richtig geladen wird? Habe gerade mal kurz in die libgdx Doku geschaut und sehe da leider keine Exception, die da bei nicht aufgefundenem File geworfen wird.

Vielen Dank für deine Antwort! Die Textur wird sicher richtig geladen. Daran kann es nicht liegen. Wenn du noch weitere Ideen hast bin offen dafür!

4

03.05.2016, 06:47

Beim erzeugen des player Sprites verwendest du posX und posY. Wenn ich dein Code und libgdx-docu richtig verstehe sind posX und posY die Position des Players innerhalb der Map, der Konstruktor erwarte aber die Texturekoordinaten.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

5

03.05.2016, 15:43

Beim erzeugen des player Sprites verwendest du posX und posY. Wenn ich dein Code und libgdx-docu richtig verstehe sind posX und posY die Position des Players innerhalb der Map, der Konstruktor erwarte aber die Texturekoordinaten.

Auch dir vielen Dank für deine Antwort. Es gibt allerdings unterschiedliche draw() Methode die die ich benutze hat an 2ter Stelle posx und an 3ter posy also daran kanns auch nicht liegen

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

6

03.05.2016, 16:30

Es geht um den Sprite CTor. Lasse da bitte einmal posx und posy komplett weg. Die sind z.B. für Texturatlanten.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

7

03.05.2016, 17:45

Es gibt allerdings unterschiedliche draw() Methode die die ich benutze hat an 2ter Stelle posx und an 3ter posy also daran kanns auch nicht liegen


Also dann nochmal langsam:

Quellcode

1
2
public int posx = 1070;
public int posy = 1000;


Member der Klasse Player, stellen die Koordinaten des Players auf der Map dar?
Indiz dafür:

Quellcode

1
2
3
4
5
6
public void moveSprite()
{ 
    posx += 10*Math.cos(Math.toRadians(angle));
    posy += 10*Math.sin(Math.toRadians(angle));
    sprite.setPosition(posx, posy);
}


Auf der Anderen Seite wird posx und posy auch dafür verwendet:

Quellcode

1
2
3
4
5
6
7
8
9
10
public Player()
{ 
   Car = new Texture("Car5.png");
   sprite = new Sprite(Car,posx,posy,225,103);
}

public void render(SpriteBatch sb) 
{
    sb.draw(sprite,posx,posy,225,103);
}


Die Doku sagt dazu aber das es als Texturekoordinaten verwendet werden!
Sprite(Texture texture, int srcX, int srcY, int srcWidth, int srcHeight);
Creates a sprite with width, height, and texture region equal to the specified size.


Das must du ändern dann sollte auch was zu sehen sein!
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

8

03.05.2016, 18:44

sb.draw(sprite,posx,posy,225,103);

Kannst du das bitte auf meinen Fall anwenden?
Das ist das jetzige:
sb.draw(sprite,posx,posy,225,103);
So dann?
sb.draw(sprite,0,0,posx,posy,225,103); oder anders?

9

03.05.2016, 19:03

sb.draw(sprite,0,0,posx,posy,225,103); oder anders?

Also mal vorweg geschickt ich kenne mich mit LibGDX/Java nicht aus, und ziehe mir die Info aus der Doku.

Du müsstest wohl schreiben.

Quellcode

1
sprite.draw(sb);


Wichtig wäre wohl noch zu wissen ob deine Texture als Einzelbild vorliegt oder mit anderen Texturen in einer Datei zusammengefassst sind. Dem entsprechend musst du den Konstruktor für Sprite (richtig) aufrufen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

10

03.05.2016, 19:40

sb.draw(sprite,0,0,posx,posy,225,103); oder anders?

Also mal vorweg geschickt ich kenne mich mit LibGDX/Java nicht aus, und ziehe mir die Info aus der Doku.

Du müsstest wohl schreiben.

Quellcode

1
sprite.draw(sb);


Wichtig wäre wohl noch zu wissen ob deine Texture als Einzelbild vorliegt oder mit anderen Texturen in einer Datei zusammengefassst sind. Dem entsprechend musst du den Konstruktor für Sprite (richtig) aufrufen.

sb.draw(sprite,0,0,posx,posy,225,103); oder anders?

Also mal vorweg geschickt ich kenne mich mit LibGDX/Java nicht aus, und ziehe mir die Info aus der Doku.

Du müsstest wohl schreiben.

Quellcode

1
sprite.draw(sb);


Wichtig wäre wohl noch zu wissen ob deine Texture als Einzelbild vorliegt oder mit anderen Texturen in einer Datei zusammengefassst sind. Dem entsprechend musst du den Konstruktor für Sprite (richtig) aufrufen.

Danke für deine Mühe. Aber das war leider nicht die Lösung Sprite.draw(sb) hatte ich schonmal aber man sieht keinen Unterschied. Das Auto ist auf einem einzelnen Bild drauf

Werbeanzeige