Bilder mit variablen Text verknüpfen und anwählbar machen

  • GM 7

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

  • Bilder mit variablen Text verknüpfen und anwählbar machen

    Hallo gm-d - Community,

    ich bin der Neue hier der auch schon gleich ein Problemchen hat bzw. eine kleine Hilfestellung benötigt :). Deswegen erstmal ein herzliches Willkommen an mich :D.

    Ich versuche mal genau zu beschreiben worum genau es geht. Beruflich bin ich ein Koch (jetzt fragen sich einige was macht denn so jemand hier) ... Habe davor aber ITA gelernt gehabt mit Schwerpunkt C++-Programmierung. Deswegen ist Programmierung immer noch eine heimliche Leidenschaft von mir.
    Mein momentanes Projekt verfolge ich schon seit Monaten und will ich endlich realisieren. Darauf kam ich, als ich das Spiel Go-Go-Gourmet gespielt habe. Ich will sowas 'entfernt' mit Gamemaker nachbauen, mit meinen eigenen Ideen. Ich will meine Version komplexer machen. Ich habe locker die letzten 4 Tage nonstop mit der Lite-Edition des Gamemakers verbracht und mich wieder ein wenig in die Programmierung und insbesondere in die Script-Sprache eingelesen.
    Bevor ich dann mit dazu entschlossen habe hier meine Frage zu posten, habe ich erst die englischsprachige Community studiert, die - nichts für ungut - einen 39-seitigen Tutorialbereich hat. Aber dort wurde ich leider nicht fündig. Hier im Forum habe ich einen ähnlichen Thread per Suche gefunden siehe hier.
    Aber ich kann dies praktisch nicht wirklich anwenden. Momentan sitze ich an dem Konzept und Entwurf für die Engine - da wir damals in der Programmierung beigebracht bekommen haben, erstmal ein Konzept und einen Plan zu haben was das Programm überhaupt macht und wie. Das heißt ich programmiere nicht drauf los, sondern versuche Teile meiner Engine zu programmieren und erstmal grob zu testen ob meine Idee und mein Konzept aufgeht. Deswegen kann ich auch keinen Quelltext vorweisen.

    Lange Rede kurzer Sinn, ich will mal mein Problem beschreiben damit ihr mir nicht einschlaft :sleeping: .
    Mein Problem ist kurz beschrieben anhand eines Screenshots aus dem Spiel Go-Go Gourmet.
    Da isser:

    Da ich ja ein Spiel machen will was meinem Beruf entspricht gibt es ebenfalls ein Bon-System.
    Meine Frage ist leicht gestellt:
    Wie kriege ich es hin bzw. wie könnte man es realisieren wie auf dem Bild, das die Zutaten rechts angezeigt werden (als Worte) und ich auf dem Spielfeld das passende Bild anklicken muss, damit dieser Punkt durchgestrichen wird auf der Liste? Würde ich jetzt aus versehen das falsche Bild anklicken passiert garnichts, quasi das falsche Bild ist deaktiviert.
    Meine Ideen die ich erstmal hatte:
    Die Rezepte sind in *.ini-Dateien gespeichert. Name, Preis und ID für einen Zufallsgenerator sind vorhanden. Dann kommen die Steps wie z.B.: Step1=Spargel...
    Diese Steps sollen ja nachher in meiner ToDo-Liste angezeigt und gestrichen werden. Ich denke das System wie man das in einer Liste anzeigt und durchstreichen kann kriege ich hin. Aber wie realisiere ich das diese Worte mit der passenden Grafik verknüpft sind? 8|
    Ich war jetzt Tag und Nacht am Überlegen und komme auf keine Lösung, deswegen hat meine Frau mich auch hierher "verbannt" :P damit ich ihr nicht als auf den Keks gehe wenn ich mit mir selber spreche um mein Problem zu lösen.

    Eine ganz kleine Frage noch zum Abschluss:
    Gibt es irgendwo eine Step-by-Step Anleitung wie die R.E.A.L-Engine funktioniert mit den externen Ressourcendateien die alles enthält?
    Ich habe mir stundenlang die Hilfedatei und Dokumentation dazu angeschaut - aber ich verstehe sie einfach nicht :(. Gibt es da irgendwo eine Anleitung wo das Schritt für Schritt erklärt ist? Weil ich finde diese Methode ist für Neulinge auch sehr interessant.

    Ich danke euch allen schonmal das ihr euch Zeit genommen habt mein Problem zu lesen und mir evtl. zu helfen!
    Ich freu mich von euch zu hören :thumbup: .

    Liebe Grüße
    zero-tx
    Wenns nach mir ginge bei einem meiner Projekte:

    GML-Quellcode

    1. global.ProgrammNotFinish = 1;
    2. if (global.ProgrammNotFinish)
    3. {
    4. for (i=0; i<5; i += 1)
    5. {
    6. instance_create(x + i,y + i, objzerotx + i);
    7. }
    8. objzerotx1.task = "Erstelle Grafiken";
    9. objzerotx2.task = "Erstelle Sound";
    10. objzerotx3.task = "Erstelle Effekte und Doku";
    11. objzerotx4.task = "Programmiere";
    12. objzerotx5.task = "Kümmer dich um deine Frau!!!";
    13. }
    Alles anzeigen
  • wow ein echter progger xD
    auf ihn!! xD

    Nein scherz beiseite *augenroll* xD

    Ich hoffe ich hab deine frage richtig verstanden und kann dir dazu verschiedene lösungen anbieten (weil man fragen ja oft auch mal anders verstehen kann... wie ich xD):
    1)
    Wenn du die passende Grafik habn willst musst du nur die schrift umstellen(siehe man sich das bild von diesem gogo spiel an sieht man das es eig nur nee eigene schrift ist)
    //du weisst ja wie man inis auslesen kann oder?
    //und auch was strings sind wenn nein bitte schreiben xD
    1.1)Mach 26 Bilder also ein ganzes Alphabet dann musst du sie wie nee schrift aneinanderortnen <-sehr umständlich
    1.2)Such dir nee hübsche schrift raus ausm GM oder lad eine von aussen ins spiel(im gogo wird eine True Font verwendet)

    2)Um etwas anwählbar zu machen musst du eine BBx(Bounding Box..) um das auszuwählbare machen und überprüfen ob die maus drüber ist //und mit if dann auch klickt

    3)durchstreichen machste einfach nen draw_sprite(spr,ind,x,y) und tust es halt auf den entsprechend durchzustreichenden text xD

    4)wenn du bezwecken willst das die liste auch die instanzen der daraufgeschriebenen sachen enthält musst du diese einfach folgendermassen machen
    Du lädst das rezept und machst halt eben den inhalt
    die liste besteht nun aus 12 beschreibbaren linien diese heißn halt linie1 bis linie12
    Create von der liste:

    GML-Quellcode

    1. i=0
    2. while(i!=11)
    3. {
    4. //für linie1 bis linie15
    5. variable_local_set("linie"+string(i),instanze_create(x,y+i*15,linie)) //jede line hat jetzt 15px höhe das heisst die liste wird 15*12px HOCH (breite bleibt unbekannt)
    6. linie0.IN=i
    7. linie1.IN=i
    8. ...
    9. //ichweiß den bedehl nicht wie ich eine nicht locale variable änder ansonsten ginge des leichter bitte ergänzen xD
    10. ...
    11. linie10.IN=i
    12. linie11.IN=i
    13. //oder das ganze in nem array
    14. linie[i]=instanze_create(x,y+i*15,linie))
    15. linie[i].GR=15
    16. }
    Alles anzeigen


    linie enthält dieses script
    Draw:

    GML-Quellcode

    1. draw_set_color(make_color_rgb(r,g,b))
    2. draw_rectangle(x,y+15*IN,x,y+IN*15+15)
    3. draw_set_color(make_color_rgb(rs,gs,bs))
    4. draw_text(x,y,index)


    nun könnteste von irgntwo die liste einfach beschreiben bsp:

    GML-Quellcode

    1. linie0.index="Tomaten" //du setzt als erstes Tomate auf die Todoliste
    2. linie0.rs=255 //-v
    3. linie0.gs=255 //macht den ersten tabelleneintrag(schrift) weiß
    4. linie0.bs=255 //-^
    5. linie0.r=255 //-v
    6. linie0.g=255 //macht den ersten tabelleneintrag weiß
    7. linie0.b=255 //-^


    Quellen die du dir ansehen sollst um eine auswählbare und durchstreichbare und ... naja nee Todolist zu machen xD
    [vvvvvvvvv]

    gm-d.de/help/403_04_collision.html //kollisionen
    gm-d.de/help/403_05_instances.html //instanzen
    gm-d.de/help/403_11_misc.html //variablen mit strings beschreiben
    gm-d.de/help/405_05_text.html //text drawen

    kleiner hinweis:
    grafiken die draw events haben zeichnen keinen eigenen sprite mehr

    EDIT:
    Kleiner hinweis in den Init/Create Code von den linien:

    GML-Quellcode

    1. rs=0
    2. gs=255
    3. bs=0
    4. r=255
    5. g=0
    6. b=255
  • Hi,

    vielen Dank für deine ausführliche und schnelle Antwort!
    Eine kurze Richtigstellung: Ich war mal ein richtiger Progger :D. Jetzt koche ich :).

    Leider hast du mein Problem etwas anders interpretiert - wie du es selber von dir gesagt hast *g*. Vielleicht habe ich es doch ein wenig falsch beschrieben, sorry.
    Wenn ich in der Küche stehe (im Spiel jetzt) sind alle Spielgrafiken wie Töpfe, Tomaten, Grill etc. bereits geladen. Jetzt bekomme ich meine ToDo-Liste angezeigt. Nehmen wir an ich muss als ersten Schritt Tomaten anklicken. Da besteht mein Problem.
    Wie bringe ich dem Programm bei, das wenn dort Tomate als erstes steht ich auch diese als erstes anklicken muss. Woher weiss das Programm welches die passende Grafik ist und auch diese nur für diesen Step anklickbar ist?
    Ich habe mir dazu ein ID-System ausgedacht - wobei ich dort wiederrum denke, das diese Möglichkeit zu kompliziert ist.
    In meiner Projektdokumentation sieht das Event so aus (so schreibe ich mir das immer auf um die nötigen Funktionen ableiten zu können):
    ToDo-Liste erscheint -> Erster Punkt der Liste (Tomaten) -> passende Grafik im Spielfeld ausfindig machen und anklicken -> andere Grafiken sind nicht anwählbar weil sie dem ersten Step nicht entsprechen -> sobald passende Grafik angeklickt -> Step auf der Liste durchstreichen -> Nächster Step aktiviert auch die passende Grafik.
    Und da bin ich seit Tagen am Überlegen wie das funktioniert.

    Falls deine Lösung mein Problem doch erklärt, habe ich Tomaten auf den Augen :D ... Aber danke schonmal für die Mühe!

    Liebe Grüße
    zero-tx
    Wenns nach mir ginge bei einem meiner Projekte:

    GML-Quellcode

    1. global.ProgrammNotFinish = 1;
    2. if (global.ProgrammNotFinish)
    3. {
    4. for (i=0; i<5; i += 1)
    5. {
    6. instance_create(x + i,y + i, objzerotx + i);
    7. }
    8. objzerotx1.task = "Erstelle Grafiken";
    9. objzerotx2.task = "Erstelle Sound";
    10. objzerotx3.task = "Erstelle Effekte und Doku";
    11. objzerotx4.task = "Programmiere";
    12. objzerotx5.task = "Kümmer dich um deine Frau!!!";
    13. }
    Alles anzeigen
  • Ich würde das etwa so lösen:
    1. Als erstes erstellst du eine Liste mit den benötigten Zutaten (die bekommst du ja aus der INI).
    2. Dann setzt du eine Variable, die angibt welche Zutat im Moment dran ist auf 0 (also die erste Zutat).
    3. Nun überprüfst du beim anklicken der Zutaten, ob die aktuelle Zutat die gleiche ist und erhöhst die Variable mit der aktuellen Zutat, falls die richtige Zutat angeklickt wurde.
    4. Dies wird gemacht, bis alle Zutaten durchgearbeitet wurden.

    Das könnte etwa so aussehen:

    GML-Quellcode

    1. //Zutatenliste (ich nenne das objekt mal obj_liste):
    2. ls_step1=ds_list_create();//Liste erstellen
    3. //Zutaten hinzufügen
    4. ds_list_add(ls_step1,"Tomaten");
    5. ds_list_add(ls_step1,"Zwiebeln");
    6. ds_list_add(ls_step1,"Fleisch");
    7. zutatnr=0;//Gesuchte Zutat = erste Zutat

    GML-Quellcode

    1. //Beim anklicken einer Zutat (z.B. obj_tomaten)
    2. //das Objekt muss im Create-Event die Variable name auf den Zutatennamen gesetzt haben (z.B. name="Tomaten")
    3. //Falls gesuchte Zutat
    4. if(name==ds_list_find_value(obj_liste.step1,obj_liste.zutatnr))
    5. {
    6. //nächste Zutat wird gesucht
    7. obj_liste.zutatnr+=1;
    8. }

    GML-Quellcode

    1. //Testet ob Rezept fertig ist, im Step-Event von obj_liste
    2. if(zutatnr>=ds_list_size(ls_step1))
    3. {
    4. //Rezept ist fertig...
    5. }


    mfg Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • ich glaub dragoons lösung is durch aus die beste die mir jetz einfallen würde vllt könnte man es doch einfacher mit arrays lösen aber speicher und lastungssparrender is die DS funktion hier ma array lösung:

    (die zutatenliste is jetzt hierbei mal die zl.xini und die unterkategorie apfelkompot ich weiß nicht was das is aber ich erfind des mal xD)
    Create

    GML-Quellcode

    1. ini_open(zl.xini)
    2. ini_read_real("apfelkompot","zutaten_",0) //anzahl der zutaten prüfen
    3. i=0


    Step

    GML-Quellcode

    1. if(mouse_check_pressed(mb_left))
    2. {
    3. if(place_meeting(mouse_x,mouse_y,ini_read_string("apfelkompot","zutat"+string(i),"Empty")) //i gibt an welche zutat grade benötigt wird
    4. {
    5. i+=1
    6. }
    7. }


    passende ini dazu wäre:
    ____________________
    zl.xini
    -------
    [apfelkompot]
    zutaten_ = 2 //oder was anderes
    zutat0=Tomate //das obj das die tomate ist muss gleich heißen!
    zutat1=Zwiebel
    zutat2=Apfel
    _____________________
  • Hi!

    Erstmal danke euch beiden für eure Lösungsansätze. Ich sitze grade vor dem Rechner und will das testweise mal programmieren was ihr mir da für gute Lösungen gegeben habt. Es ist echt simpel sehe ich grade, habe mal wieder zu kompliziert gedacht. Mein damaliger Ausbilder meinte nur zu mir: Anstatt das du von A nach B gehst, gehst du von A nach E über FGHI und dann zu B... siehe auch hier :D.

    Ich werde das mal ausprobieren und gebe eine Rückmeldung wie es gelaufen ist.
    Wegen der anderen Frage zwecks der R.E.A.L-Engine - gibt's da einen Profi der sich richtig gut damit auskennt und das erklären könnte? Das ist ein wenig zu hoch für mich... Mag daran liegen das ich schon Jahre aus der Materie raus bin :).

    Danke euch schonmal. Ich programmiere das mal ein und gebe Feedback!

    Liebe Grüße
    zero-tx
    Wenns nach mir ginge bei einem meiner Projekte:

    GML-Quellcode

    1. global.ProgrammNotFinish = 1;
    2. if (global.ProgrammNotFinish)
    3. {
    4. for (i=0; i<5; i += 1)
    5. {
    6. instance_create(x + i,y + i, objzerotx + i);
    7. }
    8. objzerotx1.task = "Erstelle Grafiken";
    9. objzerotx2.task = "Erstelle Sound";
    10. objzerotx3.task = "Erstelle Effekte und Doku";
    11. objzerotx4.task = "Programmiere";
    12. objzerotx5.task = "Kümmer dich um deine Frau!!!";
    13. }
    Alles anzeigen
  • Benutzer online 1

    1 Besucher