Bild wechseln ohne Scrolling

  • Bild wechseln ohne Scrolling

    Da ich grade dabei bin ein wenig mit meinen wenigen GML Kentnissen rumzuexperimentieren überlege ich mein erstes Spiel "Ede" dafür nochmal neu aufzulegen. Ich habe vorher für jedes Bild (das Spiel soll nicht scrollen sondern umschalten wenn man den Bildschirmrand verlässt) einen neuen Raum erstellt was sehr umständlich zu bewerkstelligen war. Da die meisten Räume mehrere Ausgänge hatten und die Räume auch keine vorgegebene Reihenfolge hatten in der man diese durchwandern musste für jeden Ausgang in jedem Bild ein Objekt für den näöchsten Raum machen.

    Jetzt wollte ich wissen ob das vielleicht möglich ist einen grossen Raum zu machen und diesen zu unterteilen. Sprich: Ich erstelle einen grossen Raum der theoretisch scrollen müsste wenn man weiter läuft. Allerdings soll der nicht scrollen sondern erst weiterblenden wenn man den Bildschirmrands verlassen hat so das ich nicht für jeden Raum einen komplett neuen Raum erstellen muss sondern das jeweils mehrere Bildschirmräume in einem grossen GameMakerraum sind.

    OJK, ich hoffe es hat jemand kapiert was ich meine, kann das nicht besser erklären.
  • Original von xiebel
    probiers mal so: (step-event von der spielfigur)

    GML-Quellcode

    1. view_xview[0] = floor(x/view_wview)*view_wview;
    2. view_yview[0] = floor(y/view_hview)*view_hview;

    Kannst du das noch etwas erklären?
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • klar, nehmen wir mal an die view hat eine breite von 320. Als view_xview wird die x-koordinate vom spieler in 320er-schritten abgerundet verwendet.

    Also wenn die figur sich zwischen 0 und 320 befindet wird auf 0 gerundet das fenster is ganz links. wenn die figur sich zwischen 320 und 640 befindet wird auf 320 gerundet, usw des gleiche dann halt noch mit der höhe
  • Original von xiebel
    klar, nehmen wir mal an die view hat eine breite von 320. Als view_xview wird die x-koordinate vom spieler in 320er-schritten abgerundet verwendet.

    Also wenn die figur sich zwischen 0 und 320 befindet wird auf 0 gerundet das fenster is ganz links. wenn die figur sich zwischen 320 und 640 befindet wird auf 320 gerundet, usw des gleiche dann halt noch mit der höhe

    Ok, jetzt hab ich's voll gecheckt.^^

    Noch 'ne Frage nebenbei:
    Wie bekommt man es hin, dass das game wärend des Scollings gefreezed wird.
    (Also z.B. so wie bei Infection.)
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Original von xiebel
    da wird einfach einer der standart transition-effekte benutzt

    8|
    ?Bahnhof?
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • er meint einzelräume zu benutzen und die transition-effekte verwenden.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Monty - Deine Idee ist zwar gut; aber ich glaube nicht sehr vorteilhaft. Denn nach Deiner Methode würde das Spiel sehr viel Speicher brauchen und eventuell auf schwächeren Rechner langsamer laufen - denn Du hast sicherlich vor, einige "Screens" in diesem riesengrossen Screen anzufertigen. Bitte korrigiert mich, wenn ich Mist schreibe.

    Jedenfalls mache ich etwas ähnliches wie Du und habe ein cooles Example gefunden - das ich für mein Game als Gerüst verwendet habe. In diesem Example benennst Du die einzelnen Rooms nur mit den Koordinaten der einzelnen Screens. z.B. x3y2 wäre der dritte Room von links, zweiter Room von oben. Du verstehst? Der Raum rechts daneben lautet also x4y2 usw...

    In den Object Properties Deiner Hauptfigur müsstest Du ein Create-Event mit folgendem Code einfügen:

    going = 0;
    next_level = "";
    level_x = 0;
    level_y = 0;


    Demnach beginnt die Figur ganz links oben - dieser Room muss auch als erster Raum im Room-Verzeichnis stehen; logischerweise MIT der für die Startposition eingetragenen Hauptfigur.

    Weiters ein Step-Event in die Properties der Hauptfigur einfügen - nämlich mit diesem Code:

    going = 0
    if (x >= room_width - 16){
    level_x += 1;
    going = 3;
    next_level = "room_goto(" + "x" + string(level_x) + "y" + string(level_y) + ")";
    execute_string(next_level);
    }
    if (x <= -16){
    level_x -= 1;
    going = 1;
    next_level = "room_goto(" + "x" + string(level_x) + "y" + string(level_y) + ")";
    execute_string(next_level);
    }
    if (y <= 0){
    level_y -= 1;
    going = 2;
    next_level = "room_goto(" + "x" + string(level_x) + "y" + string(level_y) + ")";
    execute_string(next_level);
    }
    if (y >= room_height - 20){
    level_y += 1;
    going = 4;
    next_level = "room_goto(" + "x" + string(level_x) + "y" + string(level_y) + ")";
    execute_string(next_level);
    }


    Das müsste eigentlich reichen.
    Wenn Du willst, schicke ich Dir zur Not das einfache - aber sehr hilfreiche Example.

    Grüsse,
    Kht.
  • Danke an Winapple der den Thread wieder geöffnet hat.


    Ich habe den Code von KHT in eine Jump N Run Engine gepackt und das unschalten der Bilder funktioniert ohne Probleme.
    Jetzt ist das Problem der Rücksetzpunkte.

    Wenn ich nach einem Ereignis (in diesem falle das Ableben der Spielerfigur) den Arum neu starten lasse erscheint die persistente Spielerfigur an der Stelle wo sie zuletzt stand. Ist natürlich nicht Sinn der Sache da diese dann ja direkt wieder in der Stelle steht wo sie zuletzt ein Leben verloren hat. Diese soll nach einem Raumstart da erscheinen wo sie zuletzt den Raum betreten hat. Feste Variablen sind in diesem Falle leider nicht zu benutzen da es in einem Raum ja mehrere Eingänge gibt da der ganze Levelkomplex ja leicht labyrinthmässig aufgebaut ist.

    Ein weiteres Problem welches zwar nicht so schwerwiegend aber dennoch ein wenig nervig ist ist das die Figur wenn die einen neuen Raum betritt erstmal stehenbleibt. Das heisst das ich die Lauftaste erst loslassen und dann erneut drücken muss damit die Figur weiterläuft.