Gegner sollen erst schiessen wenn sie sichtbar sind.

  • Gegner sollen erst schiessen wenn sie sichtbar sind.

    Momentan habe ich einen etwas grösseren Raum indem diverse Gegner plaziert sind welche in Richtung des Spielers schiessen.
    Das Problem hierbei ist das die Kugeln sofort von allen Seiten kommen ohne das man überhaupt weiss wo diese herkommen weil die dazugehörigen Gegner noch nicht im Bild zu sehen sind.

    Jetzt sollen die Gegner erst schiessen sobald diese im Bild sind und nicht schon sobald diese nur im selben Raum anwesend sind.

    Leider habe ich kein Icon gefunden welches den Befehl hat Aktionen erst auszuführen sobald Gegner sichtbar im Bild sind.
  • Du machst das Icon "If Expression ist true" und in die Zeile kommt:

    Quellcode

    1. x > view_xview[0] && y > view_yview[0] && x < view_xview[0]+view_wview[0] && y < view_yview[0]+view_hview[0]

    Habs nicht getestet, müsste aber gehn.
    Und nach der abfrage kommt halt dann der Code zum Schießen.
  • Ich hab das so gemacht und das Icon "if an expression is true" vor den Schussbefehl gesetzt. In die Zeile habe ich den oberen Code kopiert was jetzt allerdings dazu führt das das Spiel abstürzt.

    Ist das die einzige Möglichkiet das obere Problem einzustellen oder gibt es da auch eine komplette Iconlösung ?

    Zur Übersicht habe den Fortgang hier unten zugepostet.



    Information about object: walker

    Sprite: walker
    Solid: false
    Visible: true
    Depth: -1000
    Persistent: false
    Parent: <no parent>
    Mask: <same as sprite>

    Create Event:
    start moving in directions 000100000 with speed set to 2
    set Alarm 0 relative to 60
    set variable hit to 5

    Alarm Event for alarm 0:
    if expression x > view_xview[0] && y > view_yview[0] && x < view_xview[0]+view_wview[0] && y < view_yview[0]+view_hview[0] is true
    create instance of object walkershoot at relative position (0,0) with speed 0 in direction direction
    set Alarm 0 relative to 90

    Collision Event with object objPlayer:
    set the health relative to -100

    Collision Event with object objBullet:
    for other object: destroy the instance
    set variable hit relative to -1
    if hit is smaller than 0
    change the instance into object playerdead, not performing events

    Collision Event with object links:
    start moving in directions 000100000 with speed set to 2
    set the sprite to walker with scale factor 1

    Collision Event with object rechts:
    start moving in directions 000001000 with speed set to 2
    set the sprite to walker with scale factor 1
  • nein so geht das nicht,
    es mus in "a pece of code" stehen, und nicht in einem if expression is thrue. auserdem muss die nechste action auch noch als pease of code geschrieben sein

    GML-Quellcode

    1. if x > view_xview[0] && y > view_yview[0] && x < view_xview[0]+view_wview[0] && y < view_yview[0]+view_hview[0]
    2. instance_create(x,y,walkershoot)
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Hast du es mal mit if_distance probiert?

    //If the hero is close enough and is able to shoot, then shoot
    if (distance_to_object(obj_hero)<200)&&(canshoot=true)
    {
    instance_create(x,y,killer_bullet);
    canshoot=false;
    }
    ____

    Eine andere Möglichkeit wäre es,dem Gegner eine grosse Maske zu geben und wenn der Held
    diese berührt wird geschossen.
    Z.B. rundeMaske mit Durchmesser von 200 px,wenn er bei 100 px schiessen soll...
  • @Andy:
    Das Example hat mir leider nicht soweit geholfen da ich, selbst für den Fall das ich es verstanden hätte dies richtig einzubauen, danach auch per Script das Schussverhalten der Gegner scripten müsste.

    Aber das Spiel damit selbst war gar nicht mal so unwitzig auch wen es nur als Example gedacht war.
    :)


    @Rade:
    Meintest du mit "If_Distance" das Icon:
    "If there an object on position" ?

    Damit müsste das doch theoretisch möglich sein dem jeweiligen Object zu sagen das diese schiessen sobald ich mich in einem bestimmten Radius bewege.

    Ich habe das mal so versucht:

    Vor dem jeweiligen Schussbefehl:
    If there an object on position
    applies to: self

    object: player

    x: ???
    y: ???


    Hier ist mein Problem (falls das so überhaupt möglich ist), ich kann zwar bestimmte Koordinaten eingeben weiss aber nicht wie ich einen bestimmten Raum damit erfassen kann.

    Die Idee wäre dann
    x: -400 bis 400
    so das der schiessen soll sofern in mich in diesem Raum bewege, allerdings kenn ich hier den Befehl nicht für, in der Anleitung habe ich zwar gefunden wie ich komplette Zufallskoordinaten angeben kann aber nicht wie ich einen bestimmten Raum markieren.


    Die Idee mit den Masken ist ziemlich gut, allerdings weiss ich nicht wie stark das auf die Rechenleistung fällt, momentan bin ich schon am rumbasteln da ich bei dem Spiel ein paar Slow-Motion Szenen habe.

    Wär klasse wenn das mit
    If there an object on position

    klappen könnte, ansonsten lade ich die Datei doch mal hoch.

    Grüsse
    Monty




    Edit:

    Ich hab jetzt mal den halben Tag mit dem Script rumexperimentiert aber ausser das das Spiel ständig abgestürzt ist kam da nichts bei rum.

    Ich habe das jetzt mal mit
    "If an object on collision" probiert was leider dazu geführt hat das die Gegner immer noch permanent schiessen aber sich nun nicht mehr bewegen.

    Ich habe im Anhang mal die aktuelle gm Datei geschickt damit man sich von meinem Problem ein besseres Bild machen kann.
    Dateien

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

  • Sorry, ich weiss das ein Doppelpost eher unhöflich ist, ich wollte aber nicht extra einen neuen Thread mit dem selben Thema eröffnen.

    Ich habe jetzt ein wenig mit dem Script rumexperimentiert dies aber nicht hinbekommen und das versucht anders zu lösen. Dies hat allerdings auch nicht funktioniert, weshalb ich jetzt mal die GML Datei hochgeladen hat.

    Näheres zur Fehlerbeschreibung ist in meinem oberen Thread.

    Grüsse
    Monty
  • Hi Monty,

    ohne dir nahe treten zu wollen, aber es ist mir ein wunder wie du dich in diesem kudelmudel an verziehrungsobjecten zurechtfindest (bitte nicht persönlich nehnem). außerdem gibt es seh viele sachen die anders gemacht werden müssen.
    ich kenne mich einigermaßen mit dieser art von game aus, da ich sowas ähnliches zurzeit mache und schon gemacht habe. wenn du willst meld dich unter icq nummer: 339-487-677. dan kan ich dir das über icq erklären, hier würde es zulange dauern.
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Benutzer online 1

    1 Besucher