if anweisung verkürzen, oder ersatz für ifanweisungen`???

  • GM 8

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

  • if anweisung verkürzen, oder ersatz für ifanweisungen`???

    hi leute, ich hab da mal ne frage.

    in meinem jetzigen projekt habe ich folgenden text.

    GML-Quellcode

    1. if (place_meeting(x,y+1+vspeed,obj_boden_par ))or(place_meeting(x,y+1+vspeed,obj_treppe))or(place_meeting(x,y+1+vspeed,obj_kanone))


    es werden im laufe der programmierung immer mehr objekte die beachtet werden müssen dazu kommen. und ich muss sagen ich find die if angweisung jetzt schon zu lang.
    hättet ihr ne idee wie ich die verkürzen kann?
    oder kann man das gleiche mit argumenten lösen??? (wovon ich noch keine ahnung hab o.O)
    wenn man das mit argumenten lösen kann, könnt ihr mir dann kurz erklähren wie das funktioniert? oder ein link posten wo das erklährt wird`???


    lg gruen :)


  • Äh, Tice, du hast ein wenig recht mit dem was in deiner Signatur steht... xD
    (verstehe nicht so ganz was du gemeint hast,das Problem hat nix mit Skripten zu tun)
    EDIT: ok jetzt hab ichs verstanden. Aber glaube nicht das ihm das was bringt, er will ja den code verkürzen und kein Skript draus machen.
    Allerdings kann manns auch so lösen, sorry.



    Du kannst dein problem mit parents lösen.
    Also mach ein Object, z.b. obstacles
    Es muss keine Events oder sonstwas besitzen.
    Dann gib allen objekten die beachtet werden sollen dies als parent und dann schreib einfach:


    if place_meeting(x,y+1+vspeed,obstacles) ...



    EDIT2:

    Wenn du diee Überprüfung wirklich oft brauchst. Wär ein Skript garnicht so schlecht:

    var a;
    a = 0;
    while(argument[a] != 0)
    {
    if place_meeting(x,y+1+vspeed,argument[i]) return(1)
    i += 1;
    }
    return(0)


    (Das skript hat aber nen kleinen Bug! du darfst nicht das Object benutzten mit index 0!
    Also nicht das erste Object das du erstellt hast)


    Wenn du das erste Object unbedingt brauchst, kannst du dieses Skript benutzn wobei du als erstes Argument die anzahl der zu überpfüfenden Objecten eingeben musst:


    var a;
    a = 0;
    repeat(argument0)
    {
    i += 1;
    if place_meeting(x,y+1+vspeed,argument[i]) return(1)
    }
    return(0)
    [/i][/i]

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von DragonGamer ()

  • @dragon_gamer
    parent funktioniert nicht, weil ich schon parents vergeben habe.

    deinen 2ten edit versteh ich nicht ganz. ich will ja keine schleife einbauen...

    @tice

    dragon_gamer hat recht. mit deinem code kann ich nichts anfangen. macht mein script nicht kürzer ;)


  • Parents sind die logischste Variante, und wenn dus richtig machst, dann machste das über Parents... Vorallem speziell für diese Anforderung. Was ist denn deine momentane Verwendung der Parents?
    Könntest die Objekte auch in ner globalen Liste abspeichern und darüber die Checks machen über n Skript... Find ich aber nich so cool, lieber Parents ;) Du kannst auch einen Parent vom Parent, oder einen Parent vom Parent vom Parent haben, falls du das noch nicht wusstest.
    "das war meine letzte flamewar PM an dich ."
  • Erstell ein Skript (hier mit Name "script"), was folgenden Code enthält:

    GML-Quellcode

    1. variable=place_meeting(x,y+1+vspeed,argument0)
    2. return variable

    Dann rufst du das einfach so auf:

    GML-Quellcode

    1. if (script(obj_boden_par))or(script(obj_treppe))or(script(obj_kanone))

    Ist halt nur etwas kürzer, aber viel kürzer gehts nicht.
  • Und wenn du ein script machst, mit:

    GML-Quellcode

    1. if(place_meeting(x,y+1+vspeed,obj_boden_par)
    2. or place_meeting(x,y+1+vspeed,obj_treppe)
    3. or place_meeting(x,y+1+vspeed,obj_kanone))

    und dann einfach das Script aufrufst?

    Dann hast du es in deinem eig. Code kurz und im Script übersichtlich durch das untereinanderschreiben...
  • Erklärung zu meinem Skript mit der Schleife:

    Du brauchst es einfach als Skript zu speichern und dann in dieser Form aufrufen:

    if script_name(obj_1,obj_2,obj_3,...)
    {

    wasauchimmer tun..

    }


    Hab das skript so eingestellt das es die Argumente durchnimmt bis eins davon 0 ist (nicht gegebene Argument sind immer 0), das problem is wie gesagt das das erste Objekt auch den index 0 hat. Da musst du aufpassen da sonst das Skript dort abgebrochen wird.

    Parents sind zwar wie schon einer sagte die logischte methode, aber es stimmt dass sie nicht immer die Lösung sind.
    Ich mache grad ein RTS wo parents sehr wichtig sind und es ist ein sehr großer nachteil das z.b. das selbe Object nicht mehrere parents habaen kann.
    (Jetzt sagt pls keiner das man es mit parents von parents lösen kann, denn das funktioniert nicht bei allen Problemen...)

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)