Tower Defence Game (Zeit zwischen den Schüssen? )

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

  • Tower Defence Game (Zeit zwischen den Schüssen? )

    Hallo erstmal, :)

    ich arbeite zurzeit mit GameMaker-Studio und ich versuche schon seit eine weile ein tower defence game zu machen, aber an eine stelle weiß ich einfach nicht weiter und zwar bei der Zeit zwischen den schüssen. Ich habe in 4 Türmen im create event das geschrieben:

    GML-Quellcode

    1. ​range = 64;
    2. shootPower = 1;
    3. speedShoot = 10;
    4. price = 10;

    Natürlich bei jedem andere werte.
    Dann habe ich ein Objekt (obj_tower) gemacht und bei den 4 Türmen habe ich bei "parent" obj_tower eingesetzt. Anschließend habe ich beim obj_tower dann das geschrieben:

    Create Event:

    GML-Quellcode

    1. ​canShoot = true;

    Step Event:

    GML-Quellcode

    1. ​image_angle = direction;
    2. if collision_circle(x,y,range,obj_enemy,true,true)
    3. {
    4. _enemy = instance_nearest(x,y,obj_enemy);
    5. direction = point_direction(x,y,_enemy.x,_enemy.y)
    6. if canShoot
    7. {
    8. _bullet = instance_create(x,y,obj_bullet);
    9. _bullet.direction = direction;
    10. _bullet.speed = 30;
    11. alarm[0] = speedShoot;
    12. canShoot = false;
    13. }
    14. }
    Alles anzeigen

    Alarm[0] Event:

    GML-Quellcode

    1. ​canShoot = true


    Wenn ich es dann ausführen will, dann geht es aber nicht. Was mache ich falsch?
    Könnt ihr mir sagen was ich machen soll, damit es so ist wie ich es gerne haben möchte?
  • hast mal versucht deine canShoot abfrage auf true zu stellen ?
    also

    GML-Quellcode

    1. if canShoot = true
    2. _bullet = instance_create(x,y,obj_bullet);
    3. _bullet.direction = direction;
    4. _bullet.speed = 30;
    5. alarm[0] = speedShoot;
    6. canShoot = false;
    7. }
    Alles anzeigen
    Wir stehen zusammen und wir fallen zusammen

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

  • Häää? Da wo dein Alarm steht mein ich. Da du dem Alarm im Step-Event auf speedShoot setzt, glaub ich wird der ja ständig auf diesen Wert gestellt und kann nicht runterzählen. Da wo du Alarm[0] = SpeedShoot stehen hast, solltest du

    GML-Quellcode

    1. if Alarm[0] = -1 Alarm[0] = speedShoot
    schreiben. Das bedeutet: Beim ersten Durchlauf wurde der Alarm nicht gesetzt und steht darum auf -1. Er wird dann gesetzt und zwar auf deine Variable speedShoot. Bei den nächsten Durchläufen wird er nicht erneut gestellt, da er ja schon aktiviert wurde. Erst wenn er wieder au -1 steht, also "fertig" ist, kann er wieder gesetzt werden.
  • Also ich habe das jetzt so gemacht

    GML-Quellcode

    1. if canShoot
    2. {
    3. _bullet = instance_create(x,y,obj_bullet);
    4. _bullet.direction = direction;
    5. _bullet.speed = 30;
    6. if alarm[0] = -1 alarm[0] = speedShoot
    7. canShoot = false;
    8. }
    9. }
    Alles anzeigen

    dann gibt er mir aber immer folgende Fehlermeldung

    Quellcode

    1. ___________________________________________
    2. ############################################################################################
    3. FATAL ERROR in
    4. action number 1
    5. of Step Event0
    6. for object obj_tower:
    7. Push :: Execution Error - Variable Get -1.canShoot(100001, 0)
    8. at gml_Object_obj_tower_Step_0 (line 9) - if canShoot
    9. ############################################################################################

    Wie vorher auch schon.
    Oder habe ich irgendetwas falsch verstanden?
  • Ich arbeite selten mit Timern, im Prinzip dürfte es das gleiche sein:
    Erstelle eine Variable und setze sie auf rinen bestimmten Wert.
    Im Step event verringerst du die variable jedes mal um eins. Wenn die Variable = 0 ist schießt der Turm einmal und die Variable wird wieder hochgesetzt (das wird ebenfalls im Step Event gemacht).
    Wenn der Turm nur schießen soll wenn der Player nah genug dran ist kannst du einfach eine If-Abfrage davor setzen.
    Ganz grob würde das dann so aussehen:
    If ( Abstand zum Spieler < Wert) {
    If ( Variable == 0)
    {
    Schießen
    Variable = Wert
    }}

    Ich hoffe das hilft dir ein wenig weiter,
    Christian
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Was klappt nicht?
    Poste deinen Code nochmal.
    Ein paar mehr Infos wären immer ganz nett, sonst kann nur schwer geholfen werden :)
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Ersteinmal solltest du bei den Türmen, im create-event, wo die range, shootpower und so weiter steht, als erstes

    GML-Quellcode

    1. event_inherited()
    hinschreiben, da sonst das create-event des parents ignoriert wird und so canShoot undeklariert bleibt, daher auch die Fehlermeldung. So sollte das dann Folgendenst aussehen:

    GML-Quellcode

    1. event_inherited()
    2. range = 64;
    3. shootPower = 1;
    4. speedShoot = 10;
    5. price = 10;