Anfänger probleme:D

  • GM 8

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

  • Anfänger probleme:D

    heyho gm community
    arbeite seit kurzem mit dem gm und bin fleißig am lernen:D die meisten meiner probleme konnte ich dank zahlreicher tuts und und dem forum hier selbst lösen, aber da meine programmier kenntnisse sich nur auf grundlagen versteifen, wars nur ne frage der zeit bis ich irgendwann nicht mehr weiter komme.

    zu übungszwecken versuche ich mir gerade eine tower defence zu bauen(siehe anhang).

    zu meinem problem:

    mein ziel: -einen kanonenturm der sich zum gegner dreht( bestehend aus zwei objekten:
    -dem eigentlich schießendem tower(im anhang: ob_laser_tower),
    -und einem geschütz(im anhang: test),
    das sich in die richtung des vom tower als anvisiertem gegner (variable: target) ausrichtet) zu bauen

    ich weiß, zu dem thema gibts unmengen an posts hier im forum, so hab auch schon ein tolles scrip hier gefunden, was an sich super funktioniert, zumindest solange wie ich nur einen tower habe.
    dabei ergaben sich aber wieder neue probleme

    bei dem script muss man als argument ein ziel angeben, nach welchem sich das objekt ausrichten soll.
    da ich will, das die kanone dem ziel vom tower folgen soll, benutze ich die vom tower verwendete zielvariable target, für die ausrichtung der kanone.

    das überschneidet sich allerdings wenn ich mehrere tower baue, da sie ja als gleiche klasse alle die selbe variable target benutzen.(bitte korregiert mich wenn ich hier was verdrehe, wie gesagt ich bin grad in der lernphase und kann jede hilfe gut gebrauchen)

    also hab ich mir gedacht ich gebe der variable target einen index und zwar in abhängikeit davon, wie viele tower ich bereits gebaut habe.
    ich zähle also die variable anzahl_tower mit jedem tower den ich baue +1.
    und speicher diese variable im create von ob_laser_tower in ta_target_index das wiederrum benutze ich dann als index von meinem target.

    mein problem ist das es egal was ich mache einfach net richtig funken will, außerdem bekomm ich immer wieder fehlermeldungen von variablen wo ich den index drannhgehangen hab... naja wie auch immer , das problem beschäftigt mich jetzt schon den ganzen tag, aber ich muss sagen, ich hab schon ne menge gelernt heut:D

    wer echt nett von euch wenn ihr mir weiterhelfen könntet, ich bin echt grad am verzweifeln

    grüße prayer
    Dateien
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • Er wollte dass es mit etwas verzögerung geschieht. Nicht unbedingt sinnvoll finde ich, aber das Problem war in dem merkwürdigen Skript. Ka wer das geschrieben hat, aber ich hab ein anderes und das funktioniert problemlos:

    GML-Quellcode

    1. if instance_exists(argument0)
    2. {
    3. var drehquotient, r_xx, r_yy;
    4. drehquotient = argument1;
    5. r_xx = argument0.x;
    6. r_yy = argument0.y;
    7. if (point_distance(r_xx,r_yy,self.x,self.y) < argument2)
    8. image_angle -= (((((image_angle-point_direction(x,y,r_xx,r_yy))mod 360)+540)mod 360)-180)/drehquotient;
    9. }


    Wichtig ist nur dass du jetzt keine Drehgeschwindigkeit in Grad mehr angteben kannst sondern ein Qouotient.
    Ein Qotient von 1 bewirkt dass sich der Turm simultan zur Richtung dreht, desto größer der Wert ist, desto langsamer. So um die 4-5 ist gut für das beispiel.

    p.s. Erschrick nicht wegen der komplizierten Zeile xD da hat sich ein Schnelldenker (nicht ich xD) mal dran gemacht es so weit zu verkürzen wie menschenmöglich...

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

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

  • @-$Marvin$-:hey danke für die schnelle antwort:D

    stell mich nur grad wieder etwas doof an^^

    Quellcode

    1. image_angle=point_direction(x,y,instance_nearest(obj).x,instance_nearest(obj).y)

    instance_nearest erfordert ja zu dem objekt eine x und eine y variable. :huh:

    wie definiere ich die? :?:

    @dragonGamer: vielen dank^^ das script hatte ich hier aus dem forum, fands schön übersichtlich^^ werd deins gleich mal ausprobieren 8o
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • oh sry hab ich völlig vergessen ^^
    die x und y koordinaten bei instance_nearest geben den standpunkt an, von dem aus getestet werden soll welches objekt am nächsten ist, also musst du da einfach x und y reinschreiben.

    GML-Quellcode

    1. image_angle=point_direction(x,y,instance_nearest(x,y,obj).x,instance_nearest(x,y,obj).y)
  • wenn ich den code:

    Quellcode

    1. image_angle = point_direction(x,y,instance_nearest(x,y,ob_enemy).x,instance_nearest(x,y,ob_enemy).y);


    bekomm ich:

    ERROR in
    action number 1
    of Step Event
    for object test:


    Error in code at line 2:
    image_angle = point_direction(x,y,instance_nearest(x,y,ob_enemy).x,instance_nearest(x,y,ob_enemy).y);
    ^
    at position 67: Unknown variable x


    warum auch immer...
    aber trotzdem vielen dank^^

    ---------------------------------
    @DragonGamer: vielen dank für das script
    funktioniert einwandfrei :thumbsup:
    (hätteste mir das nicht schon heute früh schicken können :D )

    gibt es eine möglichkeit wie ich das step event von dem tower dazu bringen kann erst zu schießen, wenn sich die kanone des towers in der richtigen positon befindet?
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • Überprüf dann:

    GML-Quellcode

    1. if abs(image_angle - point_direction(x,y,gegner.x,gegner.y)) < 1
    2. {
    3. // angriff
    4. }


    Ersetz gegner durch deinen Array (hab jetzt Namen vergessen).
    Der Code überprüft ob die absolute Differenz zwischen den Winkeln kleiner als 1 ist weil die Winkel wegend em Code gut möglich minimale Abweichungen haben.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • das funktioniert doch aber nur wenn ein gegner exestiert, d. h. wenn alle gegner tot sind bekomm ich ein error.

    wie kann ich das verhindern?
    ______________________________________________________________________________________________________________________________________________________________

    EDIT: ok habs selber hinbekommen^^

    aber das verhalten der tower ist jetzt sehr eingenartig, er schießt nur sehr selten, ich hab dann an den werten rumgespielt. aber so wirklich optimal läufts noch nicht ;(

    hier der code des schießens:

    GML-Quellcode

    1. {
    2. if (instance_exists(ob_enemy))
    3. {
    4. if abs(image_angle - point_direction(x,y,ob_enemy.x,ob_enemy.y)) < 35
    5. {
    6. if firing > 0 firing += 1;
    7. if firing >= 30/rate firing = 0;
    8. if not instance_exists(target) target = noone;
    9. if instance_exists(ob_enemy)
    10. {
    11. if target = noone target = instance_nearest(x,y,ob_enemy);
    12. if point_distance(x,y,target.x,target.y) > range
    13. target = noone;
    14. else if firing = 0
    15. firing = 1;
    16. }
    17. if firing = 1 depth = -3;
    18. else depth = -2;
    19. }
    20. }
    21. }
    Alles anzeigen


    und hier der code für das drehen des towers:

    GML-Quellcode

    1. if instance_exists(ob_enemy)
    2. {
    3. var drehquotient, r_xx, r_yy;
    4. drehquotient = 10;
    5. r_xx = ob_enemy.x;
    6. r_yy = ob_enemy.y;
    7. if (point_distance(r_xx,r_yy,self.x,self.y) < ob_tower_laser.range+75)
    8. image_angle -= (((((image_angle-point_direction(x,y,r_xx,r_yy))mod 360)+540)mod 360)-180)/drehquotient;
    9. else
    10. {
    11. image_angle -= (((((image_angle-point_direction(x,y,ob_view_control.x,ob_view_control.y))mod 360)+540)mod 360)-180)/20;
    12. }
    13. }
    14. else
    15. {
    16. image_angle -= (((((image_angle-point_direction(x,y,ob_view_control.x,ob_view_control.y))mod 360)+540)mod 360)-180)/20;
    17. }
    Alles anzeigen
    Dateien
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey

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

  • das problem ist wenn ich den wert zu klein mache dann machen die tower gar nichts mehr. eigentlich schade aber ich glaube fast ich werde das über die range regeln...

    EDIT: Heyho hab grad ein wenig am code verändert da ich die tower nicht mehr als parent untereinander haben wollte, hab jetzt nur das problem das ich meinen cannon tower(ob_tower_bullet) nicht mehr anklicken kann?


    weiß jemand, wie ich den fehler beseitigen kann?

    danke schon mal im vorraus.
    Dateien
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey

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

  • ok letztes problem konnt ich mittlerweile selbst lösen.

    ich benutzte die variable ii dazu um in meinem menü informationen über den angewählten tower einzublenen:

    GML-Quellcode

    1. if ii_select != noone
    2. {
    3. draw_set_font(ft_header);
    4. draw_text(811,9,ii_select.name);
    5. draw_set_font(ft_hud);
    6. draw_text(811,32,'Damage: '+string(ii_select.damage)+' HP');
    7. draw_text(811,48,'Range: '+string(ii_select.range));
    8. draw_text(811,64,'Fire rate: '+string(ii_select.rate)+' shots/second');
    9. draw_text(811,80,'Selling price: '+string(floor(ii_select.price/2)));
    10. }


    die variable ii definere ich wenn ich einen tower auswäle, für jeden tower extra:

    laser tower

    GML-Quellcode

    1. controller.ii_select = instance_position(x,y,ob_tower_laser);


    cannon tower

    GML-Quellcode

    1. controller.ii_select = instance_position(x,y,ob_tower_bullet);


    das komische an der sache ist, das es beim laser tower funktioniert, aber beim cannontower nicht.
    und ich verseh einfach nicht warum das so ist???

    Spoiler anzeigen
    das left pressed event vom laser tower:

    GML-Quellcode

    1. {
    2. if active = 1
    3. if selected = 0
    4. {
    5. ob_tower_laser.selected = 0;
    6. ob_tower_bullet.selected1 = 0;
    7. selected = 1;
    8. controller.ii_select = instance_position(x,y,ob_tower_laser);
    9. }
    10. if active = 0
    11. if coll_path = 0
    12. {
    13. active = 1;
    14. controller.money -= price;
    15. instance_create(x,y-3,ge_tower_laser)
    16. instance_create(x,y,ob_path_marker)
    17. }
    18. }
    Alles anzeigen


    das left pressed event vom cannon tower:

    GML-Quellcode

    1. {
    2. if active1 = 1
    3. if selected1 = 0
    4. {
    5. ob_tower_laser.selected = 0;
    6. ob_tower_bullet.selected1 = 0;
    7. selected1 = 1;
    8. controller.ii_select = instance_position(x,y,ob_tower_bullet);
    9. }
    10. if active1 = 0
    11. if coll_path = 0
    12. {
    13. active1 = 1;
    14. controller.money -= price;
    15. instance_create(x,y,ge_tower_bullet)
    16. instance_create(x,y,ob_path_marker)
    17. }
    18. }
    Alles anzeigen

    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • sry für den drippel post...

    wie bekomm ich es hin das wenn ich einen tower verkaufe, das darüberliegende objekt(mein geschütz) mit gelöscht wird?

    script zum verkaufen des towers:

    GML-Quellcode

    1. {
    2. if visible = 1
    3. {
    4. var ii;
    5. ii = controller.ii_select;
    6. controller.money += floor(ii.price/2);
    7. with ii instance_destroy();
    8. controller.ii_select = noone;
    9. }
    10. }


    pls help
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • das problem ist jetzt aber das ich verschiedene tower habe und damit auch verschiedende objekte die ich löschen muss, gibts ne möglichkeit mit instance_nearst das nahste objekt vom punkt x,y, auszuwählen ohne ein bestimmtes objekt anzugeben?
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • man ich bin echt zu böld XD

    hier mal der code aus meinem sell evend:

    Spoiler anzeigen

    GML-Quellcode

    1. {
    2. if visible = 1
    3. {
    4. var ii;
    5. ii = controller.ii_select;
    6. controller.money += floor(ii.price/2);
    7. with ii instance_destroy();
    8. controller.ii_select = noone;
    9. }
    10. }


    sry wenn ich mich so blöd an stelle, wie bekomme ich es hin das ich nahste objekt in der nähe von ii lösche?

    EDIT: ok habs hinbekommen^^
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey

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

  • und zwar so:

    GML-Quellcode

    1. {
    2. if visible = 1
    3. {
    4. var ii, iix, iiy;
    5. ii = controller.ii_select;
    6. controller.money += floor(ii.price/2);
    7. iix = ii.x
    8. iiy = ii.y
    9. with ii instance_destroy();
    10. ii = instance_nearest(iix,iiy,all)
    11. with ii instance_destroy();
    12. controller.ii_select = noone;
    13. }
    14. }
    Alles anzeigen
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey