Probleme bei Collision Event und der Instanzen id

  • GM 8

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

  • Probleme bei Collision Event und der Instanzen id

    hallo zusammen,

    ich dachte die variable "id" ist fest belegt für die instanzen-id.

    bei der festlegung des wertes id.hp hat es doch auch funktioniert ?

    gruß
    ___________________________________________
    ERROR in
    action number 1
    of Collision Event with object obj_raumschiff_1
    for object obj_raumschiff_2:

    Error in expression:global.raumschiff_1.id.hp
    position 21: Unknown variable id
  • statt

    GML-Quellcode

    1. global.raumschiff_1.id.hp

    einfach

    GML-Quellcode

    1. global.raumschiff_1.hp

    schreiben.

    Beim erstellen einer instanz (mit instance_create) gibt dir die Funktion die zugewiesene ID des erstellten Objekt zurück. Sprich:

    GML-Quellcode

    1. global.raumschiff_1 = instance_create(objekt,x,y) //in der Variable global.raumschiff_1 wird nun die ID des neuen Objekts gespeichert
  • Unknown variable hp

    danke für die schnelle antwort.

    hab mir sowas schon gedacht. aber wieso wird jetzt die variabe hp nicht erkannt ? die ist von anfang an global.

    gruß
    ___________________________________________
    ERROR in
    action number 1
    of Collision Event with object obj_raumschiff_1
    for object obj_raumschiff_2:

    Error in expression:global.raumschiff_2.hp
    position 21: Unknown variable hp
  • hp die global ist?

    Wenn du eine Variable global initialisierst, dann heisst dies dass sie an kein Objekt gebunden ist (und somit auch durch Rooms transferiert werden kann.)

    Sprich: Wenn du z.B: in einem Objekt im create event

    GML-Quellcode

    1. global.variable = "hallo"
    reinschreibst,

    dann kannst du von jedem anderen Objekt aus auf die Variable einfach mit "global.variablenname" zugreifen.
    z.B:

    GML-Quellcode

    1. test = global.variable;
    2. //die Variable Test hat nun den wert von der Variable "global.variable" erhalten.

    Wäre die Variable nicht global, müsstest du davor statt "global" einfach den Instanznamen/objektnamen dranhängen.

    In deinem fall statt:

    GML-Quellcode

    1. global.raumschiff_2.hp

    muss das so ausschauen:

    GML-Quellcode

    1. global.hp
  • ja schon klar. aber es gibt mehrere raumschiffe. jedes mit eigener hp.

    deswegen raumschiff_x.hp

    global da sie beim entstehen des raumschiffs am planeten/objekt zugewiesen wird.

    die collisionsabfrage erfolgt im raumschiffs objekt.

    obwohl ich noch nicht weis wie ich individuelle hp's genererieren soll - schon viel gelesen - aber noch keiner wirkliche lösung für mich gefunden.

    gruß
  • wenn du möchtest, dass jedes einzelne Raumschiff eine HP hat, dann darfst du die Variable "HP" nicht global definieren.
    Denn "global" bedeutet nichts anderes als "für alle Objekte geltend".

    Du musst im Create event der jeweiligen objekte einfach nur hinschreiben:

    GML-Quellcode

    1. hp = 100; //oder der entsprechende Wert


    Der zugriff auf die Variable HP kann verschieden erfolgen.
    z.B: könntest du bei dem Raumschiff ein Kollisionsevent mit dem Spieler abfragen. Wenn eine Kolission stattfindet, ziehst du einfach die hp des Raumschiffs ab. (so wie du das ja machst.)

    Aber wenn du die Variable "global" definierst, dann funktioniert das nicht, da dann im Prinzip jedes raumschiff genau auf 1 Variable zugreifen würde. > Jedes Raumschiff hat die gleichen HP.
  • Probleme mit lokal und global

    da ich jetzt langsam durcheinanderkomme werde ich mal erklären was genau ich erreichen möchte.
    das spiel ist rundenbasierend, hauptsächlich D&D
    es gibt 2 planeten die jeweils raumschiffe generieren

    GML-Quellcode

    1. global.raumschiff_1=instance_create(obj_Planet_1.x+10,obj_Planet_1.y+10,obj_raumschiff_1)
    2. hp=100

    die steuerung erfolgt per maus
    die variablen id und hp werden durch ein maus event - mouse enter - angezeigt durch ein draw event
    global.raumschiff_1.hp oder raumschiff_1.hp oder hp = hat alles nicht funktioniert.
    entweder raumschiff_1 oder hp sind als variable nicht bekannt
    bei einer kollision wird das raumschiff mit der kleineren hp zersört.

    irgendwo ist ein prinzipieller denkfehler von mir.

    gruß
  • Grundsätzlich müsste

    GML-Quellcode

    1. global.raumschiff_1=instance_create(obj_Planet_1.x+10,obj_Planet_1.y+10,obj_raumschiff_1)
    2. global.raumschiff_1.hp = 100

    funktionieren, um dem eben erstellten Raumschiff die Variable hp auf 100 zu setzen. Ansonsten versuch es mal so:

    GML-Quellcode

    1. with(instance_create(obj_Planet_1.x+10,obj_Planet_1.y+10,obj_raumschiff_1))
    2. {
    3. hp = 100
    4. }

    Das Problem mit dem Error kann auftreten, wenn die Variable schon vorher verwendet wird, dh es ist sinnvoll, im Create-Event des Raumschiffs die Variable schon einmal mit einem beliebigen Wert anzulegen. Sie wird dann durch die obere Zuweisung überschrieben.

    © 2008 by Teamgrill Productions
  • es will einfach nicht

    es will einfach nicht funktionieren.
    die variable hp wird sofort global zugewiesen - trotzdem ist sie nicht bekannt ?
    es erscheint immer die gleiche meldung - gleich welches raumschiff man steuert.

    wie kann man hier d&d abläufe abbilden ?
    das meiste von mir ist in d&d



    gruß
    ___________________________________________
    ERROR in
    action number 1
    of Collision Event with object obj_raumschiff_1
    for object obj_raumschiff_2:

    Error in expression:global.raumschiff_2.hp
    position 21: Unknown variable hp
  • Du willst also bei Kollision mit dem Raumschiff, die HP des anderen Raumschiffs abziehen? Dann ist der Ansatz, die ID in die globale Variable zu speichern sowieso nicht zu gebrauchen, da ja sonst immer nur die zuletzt erstellte Instanz genommen wird. Du kannst im Kollisionsevent einfach other.hp benutzen, um die HP des anderen Raumschiffs zu bestimmen.

    © 2008 by Teamgrill Productions
  • Ich bin selbst noch Anfänger, versuche aber trotzdem mal dir zu helfen.

    Also du hast dein Object Raumschiff, dort im Create_Event erstellst du eine Variable HP und setzt sie für "self" auf z.B. 100


    Dann machst du ein Collision event mit dem anderen Object (bei dir sind beide glaube ich das gleiche objekt Raumschiff), und da drin setzt du die Variable HP (von "other") auf z.B. -50 relative.

    Das sollte es schon gewesen sein!
  • das ist das event der fehlermedung.



    [Zusammengeschoben von xxskxx]

    @MasterXY

    auch der ansatz ohne globale variablen und mit other.hp führt zur gleichen fehlermeldung.
    wieso wird ausschließich in diesem event die variable hp nicht erkannt ?

    ___________________________________________
    ERROR in
    action number 1
    of Collision Event with object obj_raumschiff_1
    for object obj_raumschiff_2:

    Error in expression:obj_raumschiff_2.hp
    position 18: Unknown variable hp
  • die erstellung des raumschiffs und das setze der hp erfolgt in den jeweiligen planten objects.

    die fehlermeldung erfolgt erst bei der kollision.





    [Zusammengeschoben von xxskxx]

    die fehlermeldung erscheint auch wennn ich die variable direkt vor der abfrage setze.

    das läuft doch was grundlegendes falsch - und ich kann es nicht finden.

  • Das liegt daran, weil du die Variable Aktion nicht so nutzen kannst. Du gibst in der Aktion, das Objekt an, das es betreffen soll, du darfst keine Verknüpfungen im Variable Feld machen. Wie ich schon vorgeschlagen habe, brauchst du nur in der Aktion rechts oben other auswählen, um das andere Objekt, mit dem das Raumschiff kollidiert zu nehmen. Im Feld für den Variablennamen soll nur hp stehen.

    © 2008 by Teamgrill Productions
  • danke, die fehlermeldung erscheint nun nicht mehr.

    jetzt kann ich mich um die korrekte hpb-berechnung kümmern.

    im moment gilt eine hp für alle und bei der erstellung einer euen instanz bekommen alle wieder die ursprüngliche hp.

    mal sehen.

    gruß