Mein Übungsprojekt + kleine Vorstellung sowie mit der Zeit Tonnen anfragen ;)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mein Übungsprojekt + kleine Vorstellung sowie mit der Zeit Tonnen anfragen ;)

    Moin Moin,

    anders als im Titel fange ich mal mit einer kleine Vorstellung an. Ich bin Ingo, werde im Dezember 36 Jahre alt und bin ich ein Fachinformatiker der im First und Second Level Support den Menschen bei Ihren Computer Problemen hilft. Frau Kind Hund Auto Haus alles vorhanden und steht in Niedersachsen rum wo ich natürlich auch lebe.

    An den Game Maker bin ich durch Humble Bundle gekommen und habe bisher im Tutorial die beiden BreakOut Version durch gearbeitet ab und an flicke ich an einer dritten Version die diese beiden vereint.

    Mein Übungsprojekt: Ich nenne es Iso-Welt, so für mich zum üben und basteln. Ich komme aus der Amiga und C64 Zeit und vermisse daher ein tiefgehendes Wirtschaftsspiel. Das wird Iso-Welt nie werden :D aber es soll für mich zum üben sein.



    Ich möchte nicht jedesmal wenn ich ne frage habe einen neuen Thread auf machen und dachte mir wenn ich mich Vorstelle und euch mein anliegen erkläre kann ich hier einfach meine Fragen hier rein schreiben. Wer mag kann mir dann ja ein paar Ratschläge geben.

    Husi war schon so nett mir bei meinem Lücken problem zu helfen Spielfelder mit lücken

    Nun habe ich eine andere Frage:

    Wie auf dem Bild zu sehen habe ich 3 Wert als Beispiel genommen (geld,essen,arbeit) es gibt 6 Spielfelder (3 x Grass, 3 x Wasser) und einen Terraforming Button
    Drückt man nun den Button wird geprüft ob genug Geld und Arbeiter da sind / ist das so wird Geld und Arbeiter entfernt (fertig)

    Sind nicht genug Arbeiter da wird zu strafe 1 Essen ab gezogen.

    In Code sieht das dann bei mir so aus:

    Quellcode

    1. if (global.geld >= 1000)
    2. {
    3. if (global.arbeit >= 4)
    4. {
    5. global.geld -= 1000;
    6. global.arbeit -= 4;
    7. }
    8. }
    9. else
    10. {
    11. global.essen -= 1;
    12. }
    Alles anzeigen


    Nun passiert ja noch nichts weiter. Ich möchte nun das nachdem erfolgreich Geld und Arbeiter eingezogen wurden man mit einem zweiten klick ein Wasser Feld in ein Grass Feld ändern kann.


    Quellcode

    1. if (global.geld >= 1000)
    2. {
    3. if (global.arbeit >= 4)
    4. {
    5. global.geld -= 1000;
    6. global.arbeit -= 4;
    7. }
    8. [color=#FF0000]then
    9. if next leftmousebutton pressed &&
    10. obj == obj_ground_water
    11. change obj_ground_water into obj_ground_grass1
    12. else
    13. play fail sound[/color]
    Alles anzeigen


    so stelle ich es mir vor aber ich weiß nicht wie ich das in game maker worte fassen soll.

    Bin wie immer für jede Hilfe sehr dankbar !
  • Ich antworte vom Handy, deshalb halte ich mich kurz.

    Quellcode

    1. if(global.geld >= 1000) and (global.arbeit >= 4){
    2. global.geld -= 1000;
    3. global.arbeit -= 4;
    4. if (mouse_check_button_pressed (mb_left)) and (place_meeting(mouse_x,mouse_y,obj_ground_water)){
    5. with (obj_ground_water){
    6. instance_delete ();
    7. }
    8. instance_create (mouse_x,mouse_y,obj_ground_grass1);
    9. }
    10. else { sound_play (s_fail); //Befehl für Sound kenn ich Grad nicht auswendig
    11. }
    12. }
    Alles anzeigen



    Edit: klammer (zu) nachgepflegt


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gruen ()

  • Super besten dank! Schon beinahe viel zu viel ;)

    ""mouse_check_button_pressed"" überprüft ob der maus button gedrückt wird UND

    ""place_meeting"" überprüfe die postion und ob diese auf das objekt trifft.

    Soweit richtig verstanden ? (Bin gerade auf der Arbeit schaue mir die Befehle nacher noch genau im Index an)

    Und keine Sorge nen Sound abspielen kann ich :)
  • Bei place_meeting nimmt der sozusagen dein Objekt/Sprite setzt es an die angegebene Position und schaut ob es mit dem angegebenen Objekt kollidiert.

    Was du meinst ist position_meeting
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • @Gruen Ich habe mit deine Code viel rum experimentiert und er funktioniert auch mit wenig anpassung wenn ich den code direkt ins Obj_ground_water stecke. Leider habe ich meine Code versuche nicht gespeichert und alles irgendwann rückgängig gemacht. So kann ich dir meine ansätze leider nicht zeigen. Aber vielleicht kannste mir noch nen Rat geben.

    Ich möchte das Erst der "Terraforming Button" gedrückt wird (der prüft auch ob geld / arbeiter stimmt) und mit nem zweiten klicke möchte ich (wenn alles true ist) das man ein feld von ändernt.

    Da mich das rum basteln aber so genervt hat und ich nicht auf eine lösung gekommen bin, habe ich mich an was leichteren gesetzt. Wie man auf dem Bild sehen kann besitzt mein Iso-Welt nun Uhrzeit und Datum. Im moment gibt es in meiner Iso-Welt noch 360 Arbeitstage aber dafür habe ich ne lösung schon im Kopf 8o

    Jeder andere darf seinen Senf natürlich auch ab geben nicht nur der Gruen ;D



    Edit:

    Hier Uhrzeit und Datum (wird aber noch überarbeitet aus global.monat wird der jeweilige monat)

    Quellcode

    1. global.sekunden += 2*room_speed;
    2. if (global.sekunden = 60)
    3. {
    4. global.sekunden = 0;
    5. global.minuten += 1;
    6. }
    7. if (global.minuten = 60)
    8. {
    9. global.minuten = 0;
    10. global.stunden += 1;
    11. }
    12. if (global.stunden = 24)
    13. {
    14. global.stunden = 0;
    15. global.tag += 1;
    16. }
    17. if (global.tag = 30)
    18. {
    19. global.tag = 1;
    20. global.monat +=1;
    21. }
    22. if (global.monat = 12)
    23. {
    24. global.monat = 1;
    25. global.jahr += 1;
    26. }
    Alles anzeigen

    Bilder
    • iso-welt2.png

      68,95 kB, 1.152×648, 279 mal angesehen
  • Das Mit dem Monat würde ich mit Switch/Case machen. Da legst Du an, wie viele Tage der jeweilige Monat hat und das übermittelst Du dann an global.monat. Schon hast Du 365 Tage und die letzten 5 Urlaubstage im Jahr wurden erfolgreich gestrichen. Dabei kannst Du gleich den Namen des Monats ermitteln und ihn korrekt im Draw ausgeben.
    Byte GameMaker Magazin - Online Zeitschrift für Spieleentwickler
  • Guten Morgen.

    Schon wieder vom Handy aus.
    Also du willst das man einmal klickt und dann wird Geld und Arbeiter überprüft. Dann nochmal klicken um tatsächlich zu terraformen...

    Dafür erstelle eine Variable. Ich nenne sie der einfachheits halber tt

    Beim Code wie ich ihn vorher geschrieben habe setzt du dann die variable auf tt=1;
    Anstatt das Objekt zu ändern

    Dann schreibst du eine weitere if-anweisung die abfragt ob tt==1 ist und die Maus das Feld berührt sowie ob der maus Button geklickt wird
    Hier kommt dann der Code rein um das Objekt zu wechseln. Und die variable wieder auf 0 setzen.

    Ich schlage vor das du noch eine dritte if-anweisung erstellst die abfragt ob tt==1 ist, aber der maus Zeiger NICHT auf dem Terraforming Objekt liegt. Dann soll tt auf 0 gesetzt werden.


    Der Code ist so aber unvollkommen. Er funktioniert zwar, aber du müsstest eine solche anweisung für jede Art Untergrund schreiben.
    Wenn du das verhindern willst müsste man mit get id arbeiten. Oder mit parents

    Wenn ich dir ein example machen soll dann wird das nichts vor heute abend, denn mit dem Handy ist das ein Krampf


  • Guten Morgen,

    ich muss ja gleich auch erstmal arbeiten also keine eile ;) Von Get ID oder Parents habe ich bisher noch nichts wirklich gelesen. Werde ich mir heute Abend oder vielleicht in meiner Mittagspause ebend angucken.

    Deiner erklärung mit dem variable beispiel tt verstehe ich und denke ich kann ich so auch ohne beispiel umsetzen! Da ich mich da erst heute abend dran setzen kann, brauch ich kein beispiel dafür und würde auch lieber selbst tüffelten ;)

    Aber mit dem Get ID würde ich mir arbeit ersparen und der Code wäre "vollkommender" hmmm alles klar genug Lekture und basteln aufgaben :D

    Danke
  • Hätte ich am frühen morgen beinahe @the_black_wall überlesen :S

    Switch/Case steht nun mit auf der Liste was ich mir anschauen muss. Ich hatte selbst 2 gedanken zum Thema Datum. Einmal hätte ich das 3 variablen für Gerader Monate / Ungerade / Schaltjahr gemacht. Und die jeweils dann abgefragt.

    Der andere gedanken war jeden Monat selbst zu benennen damit ich dort über die variable Dezember zum beispiel auch den 24igsten mit Weihnachten in verbindung bringen kann.
    Was mit bei Gerader und Ungerader variable warscheinlich schwerer gefallen wäre (aber nicht unmöglich).

    Nur sehr viel schreib arbeit !

    Gucke ich mir an Switch / Case , Danke
  • @the_black_wall Ich weiß nicht ob ich das nun richtig wieder gebe. Habe mir aber ein Video gestern oder vorgesten angesehen übert "Arrays" (oder so ähnlich) was genau diesen Case / break beschreibt wie du in dem Switch/Case gemacht hast. Dort habe ich gelernt das der Break besser ist fürs programm weil der Speicher frei gibt (verbessert mich ruhig) und da her sauber ist als würde man es mit IF Else machen.

    Ist das nun Arrays (oder habe ich da was falsch verstanden) oder Switch? Hab auch gerade nicht auf dem Schirm welches Video das war.

    Aber danke erstmal für den Code!
  • Ok dann habe ich das verwechselt ! Ich gucke mir soviel an und lese soviel da habe ich das wohl durch einander gebracht das Switch/Case Beispiel was Black Wall da gelassen hat habe ich gestern oder vorgestern erst im video was drüber gesehen hatte aber im kopf das der das arrays genannt hat.

    Hab ich wohl verwechselt. Und ich glaube nun auch wieder zu wissen wo ich Arrays gesehen habe. Ich glaube Husi hat hier jemanden nen Beispiel gegeben wie man zum Beispiel Waffen mit Att Def werten belegt und durch die Arrays das irgendwie geregelt wird. Bins leider nur überflogen da ich in Iso-Welt noch keinen bedarf dafür gesehen oder gewusst habe.
  • Was du in deiner Welt mit Arrays managen kannst, ist das Terrain. Statt eigener Objekte kannst du zB ein 2 dimensionales Array oder ein ds_grid (das ist fast dasselbe nur mit eigenen spezielleren Funktionen) erstellen, in dem Art und Höhe des Terrains eingespeichert sind.

    In deindem Fall wäre das jetzt:

    GML-Quellcode

    1. terrain = ds_grid_create(2,3);
    2. for (i = 0 ; i < ds_grid_height(terrain) ; i += 1)
    3. {
    4. terrain[# 0,i] = spr_terr_land;
    5. terrain[# 1,i] = spr_terr_water;
    6. }
    7. //draw
    8. for (i = 0 ; i < ds_grid_width(terrain) ; i += 1)
    9. {
    10. for (j = 0 ; j < ds_grid_height(terrain) ; j += 1)
    11. {
    12. draw_sprite(terrain[# i,j],subimage,i+isoOffsetX,j+isoOffsetY)
    13. }
    14. }
    Alles anzeigen


    bei der Methode musst du nur einen Weg finden, wie du die Terrain Tiles an die richtige stelle zeichnest. Aber das ist einfach ein Beispiel wofür sich soetaws gut eignet.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Ich habe gegoogelt im Index geguckt und versucht video tutorial zu finden aber irgendwie check ich das nicht.... ich kann ja mal soweit wie ich verstehe weg hauen:

    Quellcode

    1. terrain = ds_grid_create(2,3); /// 2 breit 3 hoch ein gitter wird erstellt mit dem namen terrain
    2. for (i = 0 ; i < ds_grid_height(terrain) ; i += 1) /// i ist gleich 0 wenn i klein als die höhe des gitters von terrain ist rechne einen drauf
    3. {
    4. terrain[# 0,i] = spr_terr_land; /// terrain wird hier gesagt das spr_terr_land die id 0 hat und i ist
    5. terrain[# 1,i] = spr_terr_water; /// terrain wird hier gesagt das spr_terr_Watter die id 1 ist und i ist
    6. }
    7. //draw
    8. for (i = 0 ; i < ds_grid_width(terrain) ; i += 1) /// i ist gleich 0 is i kleiner als die breite des gitters rechne +1
    9. {
    10. for (j = 0 ; j < ds_grid_height(terrain) ; j += 1) /// j ist gleich 0 is j kleiner als die breite des gitters rechne +1
    11. {
    12. draw_sprite(terrain[# i,j],subimage,i+isoOffsetX,j+isoOffsetY) ja male terrain nutze die ids von i und j und dann verstehe ich nur bahnhof.
    13. }
    14. }
    Alles anzeigen


    Wo ich nun meine verständnis erklärt habe kam mir die Idee:

    Quellcode

    1. terrain = ds_grid_create(2,3);
    2. for (i = 0 ; i < ds_grid_height(terrain) ; i += 1)
    3. {
    4. terrain[# 0,i] = spr_terr_land;
    5. terrain[# 1,i] = spr_terr_water;
    6. }
    7. for (j =0 j < ds_grid_width(terrain); j +=1)
    8. {
    9. terrain[# 0,j] = spr_terr_land;
    10. terrain[# 1,j] = spr_terr_water;
    11. }
    12. for (i = 0 ; i < ds_grid_width(terrain) ; i += 1)
    13. {
    14. for (j = 0 ; j < ds_grid_height(terrain) ; j += 1)
    15. {
    16. draw_sprite(terrain[# i,j],subimage,i+isoOffsetX,j+isoOffsetY) /// daraus werde ich aber immnoch nicht schlau
    17. }
    18. }
    Alles anzeigen


    Edit: Ups vielleicht sollte ich erwähnen was ich genau nicht verstehe :D : welches subimage ? stellt das nur nen platzhalter praktisch da. könnte also spr_terr_land sein=

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Zentrax ()

  • Wenn du das grid nur einfach nur so drawest, dann zeichnest du dein Terrain wie auf einem Karopapier, was du brauchst ist aber wie auf einem um 45 grad gedrehtem Karopapier und dann auch noch in einem flachen Winkel angeschaut. Das macht dann der isoOffsetX und isoOffsetY den du berechnen musst.
    Ganz links Oben im Grid muss ganz mittig oben im draw sein. und rechts unten ist mitte unten.
    Du musst die Zellen also immer versschieben, je weiter du im grid von links nach rechts gehst. Desto weiter nach unten und nach rechts zeichnest du die Terrain tiles.

    In dem Bild im Anhang versuche ich das ein bisschen darzustellen.

    Eigtl brauchst du einen isoOffsetX,Y und ein isoStartX,Y - isoStart verschiebt sich immer weiter nach links, je linker du im Grid bist und nach unten je weiter du unten bist. isoOffset ist i*32 und j*16 und die stelle wo du etwas hindrawest ist dann:

    GML-Quellcode

    1. x + isoStartX + isoOffsetX;
    2. y + isoStartY + isoOffsetY;
    Bilder
    • isoOffset.PNG

      33,48 kB, 1.037×563, 236 mal angesehen

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Aktueller Code

    Quellcode

    1. // Spielfeld Gitter erstellen 2x3
    2. spielfeld = ds_grid_create(2,3);
    3. for (i = 0 ; i < ds_grid_height(spielfeld) ; i += 1)
    4. {
    5. spielfeld[# 0, i] = spr_ground_dirt;
    6. spielfeld[# 1, i] = spr_ground_water;
    7. }
    8. for (j = 0 ; j < ds_grid_width(spielfeld); j +=1)
    9. {
    10. spielfeld[# 0, j] = spr_ground_dirt;
    11. spielfeld[# 1, j] = spr_ground_water;
    12. }
    13. for (i = 0 ; i < ds_grid_width(spielfeld) ; i += 1)
    14. {
    15. for (j = 0 ; j < ds_grid_height(spielfeld) ; j += 1)
    16. {
    17. draw_sprite(spielfeld[# i, j], spr_ground_dirt, i+i+32, i+j+32); // hmpf
    18. }
    19. }
    Alles anzeigen


    Das Problem ist bei mir wird einfach garnix gezeichnet, wenn ich wüsste wie überhaupt und egal wie es aussieht die spielfelder zu sehen sind tüffelt ich mir das aus.
    Ich habe den Code ja etwas ändert und bei dem:
    draw_sprite(spielfeld[# i, j], spr_ground_dirt, i+i+32, i+j+32);
    ist da meine überlegung mit den spr_ground_dirt richtig ? Und in deinem beispiel stand i+i isoofset, i+j isooftset. Ist meine schreibweise den so falsch das einfach nix zu sehen ist ?

    Edit : Warte gedanken blitz muss zum code ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Zentrax ()

  • Ich weiß nicht, was bei deinem Gedankenblitz herausgekommen ist, aber ich hab dir hier mal einen Beispiel code gemacht; ich hoffe die Formeln sind verständlich, es ist schwer das genau und gut zu erklären^^

    Der code nimmt ein ds_grid und verzerrt es im 2:1 Verhältnis damit die linke obere Ecke (0,0) bei (x,y) ist und die recht untere Ecke (2,3) bei (x,y+unteresende). Dabei verschiebt sich der Startpunkt wo eine Zeile gedrawed wird immer weite, wenn du im koordinaten system nach unten gehst, gehst du dann nach links und unten usw. Es wird also aus dem Rechteckigem grid ein Rhombus.
    Bilder
    • isoOffset_02.PNG

      7,32 kB, 394×208, 234 mal angesehen
    Dateien
    • isoterra_000.rar

      (9,97 kB, 245 mal heruntergeladen, zuletzt: )

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Aku_Ryou ()