Greenfoot - Objekt im Vordergrund lassen, bei einer scrollbaren Welt ohne zentrierten Actor

andynbg9000

Neues Mitglied
Hallo Leute,

wir sind gerade dabei, für eine Projektarbeit in der Schule, ein Spiel mithilfe von Greenfoot zu programmieren, jedoch haben wir nun ein riesen Problem.

Die Spielidee ist relativ einfach. Wir wollen einen Menschen (verkörpert den Spieler) in einer zufällig generierten Wüste spawnen lassen. Er muss die nächste Stadt, welche auf der Karte ebenfalls zufällig generiert wird, finden.
Nun habe ich ein Problem damit, Objekte im Vordergrund zu fixieren d.h sie sollen sich nicht bewegen. Egal was der der Actor macht, diese Objekte sollen immer an der selben Stelle auf dem Bildschirm zu sehen sein. In Moment ist damit eine Health Bar gemeint.
Bei einem „Central Actor Scrolling System“, stellt man die Objekte mit dem Actor gleich, da man den Actor immer zentriert sieht (sich immer an derselben Stelle befindet).
Jedoch benutze ich ein „Follow Actor Scrolling System“ aus dem Multi Scroll Engine von „Gevater_Tod4711“, welches er auf die Greenfoot Seite hochgeladen hat. Hier kann der Actor bis zu einer gewissen Grenze, frei im Feld herumlaufen. Erst wenn er diese Grenze berührt wird die Welt gescrollt. Somit ist der Actor nicht fixiert, sondern bis zu dieser Grenze frei bewegbar = Objekt kann nicht mit Actor gleichgestellt werden.
Hier findet ihr das Projekt: Greenfoot | Multi Scrolling Engine

Ich denke mal, dass das das ScrollSystem ist:
Java:
protected final void followActor() {
        if (followingActor != null) {
            if (followingActor.getWorld() == null) {
                followingActor = null;
                return;
            }
            int scrollingX = 0;
            int scrollingY = 0;
            if (scrollingSystem == CENTRAL_ACTOR_SCROLLING_SYSTEM) {
                scrollingX = getWidth()/2 - followingActor.getX();
                scrollingY = getHeight()/2 - followingActor.getY();
            }
            else {
                if (followingActor.getX() > getWidth() - scrollingActorSideDistance) {
                    scrollingX = -(followingActor.getX() - (getWidth() - scrollingActorSideDistance));
                }
                else if (followingActor.getX() < scrollingActorSideDistance) {
                    scrollingX = scrollingActorSideDistance - followingActor.getX();
                }
                if (followingActor.getY() > getHeight() - scrollingActorSideDistance) {
                    scrollingY = -(followingActor.getY() - (getHeight() - scrollingActorSideDistance));
                }
                else if (followingActor.getY() < scrollingActorSideDistance) {
                    scrollingY = scrollingActorSideDistance - followingActor.getY();
                }
            }
            if (scrollingX != 0 || scrollingY != 0) {
                totalXMovement += scrollingX;
                totalYMovement += scrollingY;
                if (WORLD_WIDTH != 0) {
                    if (totalXMovement > WORLD_WIDTH/2) {
                        followingActor.setLocation(followingActor.getX() - (totalXMovement - WORLD_WIDTH/2), followingActor.getY());
                        scrollingX -= (totalXMovement - WORLD_WIDTH/2);
                        totalXMovement = WORLD_WIDTH/2;
                    }
                    else if (totalXMovement < -WORLD_WIDTH/2) {
                        followingActor.setLocation(followingActor.getX() - (totalXMovement + WORLD_WIDTH/2), followingActor.getY());
                        scrollingX -= (totalXMovement + WORLD_WIDTH/2);
                        totalXMovement = -WORLD_WIDTH/2;
                    }
                }
                if (WORLD_HEIGHT != 0) {
                    if (totalYMovement > WORLD_HEIGHT/2) {
                        followingActor.setLocation(followingActor.getX(), followingActor.getY() - (totalYMovement - WORLD_HEIGHT/2));
                        scrollingY -= (totalYMovement - WORLD_HEIGHT/2);
                        totalYMovement = WORLD_HEIGHT/2;
                    }
                    else if (totalYMovement < -WORLD_HEIGHT/2) {
                        followingActor.setLocation(followingActor.getX(), followingActor.getY() - (totalYMovement + WORLD_HEIGHT/2));
                        scrollingY -= (totalYMovement + WORLD_HEIGHT/2);
                        totalYMovement = -WORLD_HEIGHT/2;
                    }
                }
                scrollWorldObjects(scrollingX, scrollingY);
            }
        }

Und damit wird es letztendlich Ausgeführt:
Java:
public final void scrollWorldObjects(int scrollingX, int scrollingY) {
        List<Actor> actors = getObjects(Actor.class);
        for (Actor actor : actors) {
           
                actor.setLocation(actor.getX() + scrollingX, actor.getY() + scrollingY);
            
        }
        createTextur();
    }


Hat vielleicht jemand von ein eine Idee, wie wir dieses Problem lösen könnte?

Ich hatte ein Paar Ideen, jedoch hat keine davon funktioniert:
1. Ich könnte die Bar als Other Class erstellen, jedoch hab ich keine Möglichkeit gefunden sie dann auszuführen
2. Ich könnte die Bar in die Welt schreiben, jedoch konnte ich sie dann wieder nicht ausführen
3. Ich könnte die Koordinaten von „protected final void followActor“ unzwar von den Teil wenn der Actor an den Rand, wo die Welt bewegt wird rausfischen und dann eine eigene public final void scrollWorldObjects(int scrollingX, int scrollingY) nur für die Bar erstellen. Also public final void scrollBar(int BarscrollingX, int BarscrollingY):

Man müsste diese Bar einfach irgendwie erstellen, dass sie nicht in der Actor Klasse ist... Den die Actor Klasse wird ja von der ScrollEngine beinflusst... Oder die Koordinaten aus der ScrollEngine rausnehmen :S

-------------Den Anfang habe ich weggelassen, da da er meiner Meinung nach nur den Actor innerhalb der Ränder bewegt, ich brauche aber die Bewegung an den Rändern...........

Java:
protected final void followActor() {

[...]

            if (scrollingX != 0 || scrollingY != 0) {
                totalXMovement += scrollingX;
                totalYMovement += scrollingY;
                if (WORLD_WIDTH != 0) {
                    if (totalXMovement > WORLD_WIDTH/2) {
                        followingActor.setLocation(followingActor.getX() - (totalXMovement - WORLD_WIDTH/2), followingActor.getY());
                        scrollingX -= (totalXMovement - WORLD_WIDTH/2);
                        totalXMovement = WORLD_WIDTH/2;
		scrollingX = BarscrollingX
                    }
                    else if (totalXMovement < -WORLD_WIDTH/2) {
                        followingActor.setLocation(followingActor.getX() - (totalXMovement + WORLD_WIDTH/2), followingActor.getY());
                        scrollingX -= (totalXMovement + WORLD_WIDTH/2);
                        totalXMovement = -WORLD_WIDTH/2;
		scrollingX = BarscrollingX
                    }
                }
                if (WORLD_HEIGHT != 0) {
                    if (totalYMovement > WORLD_HEIGHT/2) {
                        followingActor.setLocation(followingActor.getX(), followingActor.getY() - (totalYMovement - WORLD_HEIGHT/2));
                        scrollingY -= (totalYMovement - WORLD_HEIGHT/2);
                        totalYMovement = WORLD_HEIGHT/2;
		scrollingY = BarscrollingY
                    }
                    else if (totalYMovement < -WORLD_HEIGHT/2) {
                        followingActor.setLocation(followingActor.getX(), followingActor.getY() - (totalYMovement + WORLD_HEIGHT/2));
                        scrollingY -= (totalYMovement + WORLD_HEIGHT/2);
                        totalYMovement = -WORLD_HEIGHT/2;
		scrollingY = BarscrollingY
                    }
                }
                scrollWorldObjects(scrollingX, scrollingY);
	scrollbar(Barscrolling, BarscrollingY)
            }
        }
Natürlich haben wir die einzelnen Variabeln vorher im Konstruktor deklariert ;)

Leider ist es dann abgestürtzt…

Ich hänge mal mein Projekt mit bei, fallls sich jemand, das ganze Projekt ansehen will. Die Bar ist vom "Progress bar/Health bar class" Projekt von "Danpost". Greenfoot | Progress bar/Health bar class

Wir sind voll am verzweifeln und würde mich mega freuen wenn mir jemand helfen könnte...

Grüße :)
 

Anhänge

  • Problemkind.zip
    140,7 KB · Aufrufe: 4

TheSorm

Bekanntes Mitglied
also an sich must du der Heelth bar nur Koordinaten im Fenster zuweisen, heist nicht mit ergendeiner engin oder in relkation von ergendetwas sondern einfach ganz normal aufs Frame painten mit den Variablen des Frames!
 

andynbg9000

Neues Mitglied
Wie meinst du das? Ich bin leider echt nicht sooo gut in Java, kannst du mir bitte eine Zeile als Beispiel schreiben, dann würde ich es versuchen zu übernehmen... :S

Wie ich das verstehe:

Java:
public Bar bar = new Bar("Player 1", "Health Points", 25, 100);
im Konstruktor

und

Java:
addObject(bar, 250, 40);
in der ExampleWorld Methode, welches die Unterklasse von der ScrollEngine und damit die Unterklasse der Welt wäre.

Also:
World
SrcollEngine​
ExampleWorld <---- Da
habe ich auch schon gemacht, jedoch ist es dann auf der Welt festgepinnt und verschiebt sich aus demn fenster raus, wenn sich der Actor bewegt.
 

TheSorm

Bekanntes Mitglied
ich würde dir als erstes vorschlagen alss das mit greenfood das ist für die grundlagen gu aber für ein spiel einfach das Falsche! du müstest die Health bar selbst schreiben also nicht eine Vordifinirte nehmen auch wens bestimmt auch mit dieser geht wenn du sie von der kkordinate mit dem player zusammen updatest. Aber ich würde mir an deiner stelle ein Java Buch kaufen und java richtig lernen und nict die abgespeckte greenfood version mit der ich auch angefangen habe. Danach soltest du im Internet mit Tuorials weiterarbeiten dann kommt man gut vorran ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Greenfoot Variable in einer Datei und nicht in einem Objekt/World speichern Java Basics - Anfänger-Themen 1
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
M Greenfoot World und Actor Quellcode Java Basics - Anfänger-Themen 13
D incompatible Types Problem in Greenfoot Java Basics - Anfänger-Themen 5
W Schleifen bei Greenfoot Java Basics - Anfänger-Themen 4
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
B Hilfe bei Greenfoot ( random blickrichtung + vor(); Java Basics - Anfänger-Themen 10
BlueFox Greenfoot wait() Java Basics - Anfänger-Themen 10
V [Greenfoot] java.lang.NullPointerException Java Basics - Anfänger-Themen 12
Domi741 [Greenfoot] Zugriff auf Subclass von Actor in Subclass von World Java Basics - Anfänger-Themen 16
T Wegberechnung mit Greenfoot Java Basics - Anfänger-Themen 10
B Erste Schritte Generelle Fragen zu Java / Greenfoot. Java Basics - Anfänger-Themen 8
Q Greenfoot: Art Mario programmieren Java Basics - Anfänger-Themen 7
K Problem mit Greenfoot - aussetzen modellieren? Java Basics - Anfänger-Themen 2
G [Greenfoot] Zeitverzögerung Java Basics - Anfänger-Themen 11
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
Rxiiz Objekt aus ComboBox entfernen Java Basics - Anfänger-Themen 4
I JSON in Objekt umwandeln Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
Say Objekt Java Basics - Anfänger-Themen 4
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
M BlueJ Objekt in Objektliste Java Basics - Anfänger-Themen 2
B Objekt in Klassendiagramm an fremdes Objekt weiterreichen? Java Basics - Anfänger-Themen 6
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
melaniemueller Fernseher als Objekt Java Basics - Anfänger-Themen 9
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
S Aufzurufendes Objekt Java Basics - Anfänger-Themen 3
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
N LocalTime einem Objekt zuweisen Java Basics - Anfänger-Themen 2
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
J Y-Koordinate von GUI-Objekt bestimmen Java Basics - Anfänger-Themen 2
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
H Objekt aus einem Array löschen Java Basics - Anfänger-Themen 1
H Objekt im Array speichern Java Basics - Anfänger-Themen 2
H Objekt mit Methode erstellen Java Basics - Anfänger-Themen 6
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
E Was kommt in ein Objekt und was in die Main Methode? Java Basics - Anfänger-Themen 8
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
W OOP Objekt Methode Java Basics - Anfänger-Themen 9
A Objekt in Arrayliste Java Basics - Anfänger-Themen 2
B Mit methode Objekt aus anderer Klasse erstellen Java Basics - Anfänger-Themen 6
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
M Objekt einer Klasse speichert die Veränderung nicht Java Basics - Anfänger-Themen 1
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
A Zufälliges Objekt basierend auf Wahrscheinlichkeiten bekommen. Java Basics - Anfänger-Themen 4
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
S Objekt-Attribute "variabel" gestalten Java Basics - Anfänger-Themen 10
J Datenbankstruktur als Objekt anlegen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben