geskriptete Gegnerbewegung

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

FreizeitCoder

Betreff: geskriptete Gegnerbewegung

BeitragMi, Mai 10, 2006 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich will mich diesmal an einem Arbeitsplatz geeigneten SpaceShooter versuchen! Etwas kleines für die 5min zwischendurch also. Wink
Der SpaceShooter scrolt von oben nach unten......das übliche halt.

Mein Problem:
Ich kenne keine gängige Methode wie ich Gegner mit einem Flugmuster versorgen kann!

Ich stelle mir das grundsätzlich so vor:
Gegner der Art 1 mit Geschwindigkeit 1 soll sich solange er am leben ist nach Flugmuster A fortbewegen.
Ich könnte dann 6 verschiedene Flugmuster definieren, und sie je nach Gegner vergeben.

Bei geplanten 35-40 FPS kann ich mir ein DataFeld sparen!!

Vielleicht kann mir jemand einen Tipp geben über welche Befehle ich das am besten anpacke!

Goodjee

BeitragDo, Mai 11, 2006 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, ein type feld wäre da wahrscheinlich sehr geeignet...

Code: [AUSKLAPPEN]

type gegner
field typ
field live
field muster
field posx,posy,speedX,speedY
end type

global bot.gegner

;gegner erstellen

bot.gegner=new gegner
bot\Typ=1
bot\live=100
;.....
;.....
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Vincent

BeitragDo, Mai 11, 2006 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
also das einfachste ist natürlich eine einfache geradeausbewegung kombiniert mit einer sinusabhängigen seitwärtsbewegung.

toller ist da schon ein waypointsystem. so hab ich das mal für einen spaceshooter gemacht ... kannst die waypoints ja nach 6 festen mustern verteilen, und dann die gegner diese dinger abfliegen lassen.
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt !

Goodjee

BeitragDo, Mai 11, 2006 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, ich würd einfach immer speedX oder SpeedY (kommt draufan ob man nach oben oder dach rechts scrollt) negierenwenn man über eine bestimmte position kommt....dann fliegen die Dinger ZickZack
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

FreizeitCoder

BeitragDo, Mai 11, 2006 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
klingt ja ganz gut, aber ich hätte gerne runde bewegungsmuster!

Die Gegner die von oben nach unten gerade durchfliegen werde ich über eine Sinuskurve steuern.
Es soll allerdings auch Gegner geben die von oben kommen dann einen Kreis beschreiben und das bild wieder nach unten verlassen! Mit Waypoints sieht das zu abgehackt aus, da sie dann immer den kürzesten weg nehmen und nur gerade linien abfliegen würden.
 

FreizeitCoder

BeitragDo, Mai 11, 2006 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Klingt ja ganz gut, allerdings hätte ich gerne runde Bewegungen der Gegner.

Die Gegner die einfach durch das Bild fliegen werde ich über eine Sinuskurve steuern.
Es soll aber auch welche geben die von oben ins bild fliegen, einen kreis beschreiben und das bild nach unten wieder verlassen!
Waypoints sind schon nahe an der Lösung dran, aber dann sehen die bewegungen zu geradlinieg und abgehackt aus.

Vincent

BeitragFr, Mai 12, 2006 2:33
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo !
du musst die gegner ja nicht sofort wenn sie einen waypoint erreicht haben in die richtung des nächsten waypoints (=WP) drehen.
wenn du die langsam in richtung des nächsten WP drehst ( drehgeschwindigkeit ist abhängig vom abstand zum nächsten WP), während du schon weiter fliegst, dann sieht das schön weich aus.

ein kleines Beispiel:
dabei ist zu beachten, dass der nächste WP nicht zu nah an dem schiff liegt ... sonst umkreist es den WP immer ohne anzukommen. muss man halt entweder im editor beachten, oder abfragen und bei bedarf die kurven variable verändern-

Code: [AUSKLAPPEN]

Global Xres = 800 , Yres = 600
Graphics Xres , Yres , 0 ,2
SeedRnd MilliSecs()

timer = CreateTimer(200)

Global Sx# = Xres / 2 , Sy# = Yres / 2 ;schiffstartposition
Global WPx# = Rand( Xres / 10 , Xres - Xres / 10 ) ,  WPy# = Rand( Yres / 10 , Yres - Yres / 10 ) ;WP positionieren
Global alpha# , beta# , kurven# = 0.02 , ix# , iy# ; winkelzeugs ... je kleiner der wert kurven# , desto geringer ist die lenkbewegung des schiffes
Color 255 , 0 , 0
Rect WPx - 10 , WPy - 10 , 20 , 20 , 0 ;WP malen

Color 0 , 255 , 255
While Not KeyDown( 1 )
   
   Rect Sx - 2 , Sy - 2 , 4 , 4 ;schiff
   Sx = Sx + Cos( alpha ) ;schiff bewegen
   Sy = Sy + Sin( alpha ) ;schiff bewegen
   
   beta = (ATan2#( ( WPy - Sy ) , ( WPx - Sx ))) ;der ideale winkel

   ix = Sin(alpha)
   iy = Cos(alpha)
   alpha =  ATan2(ix-(ix-Sin(beta#))*kurven,iy-(iy-Cos(beta))*kurven) ;interpolierter winkel -> siehe www.blitzbasic.com / codearchiv

   If Sx > WPx - 10 And Sx < WPx + 10 And Sy > WPy - 10 And Sy < WPy + 10 ;ist das schiff ungefähr am WP kreis ?
      WPx = Rand( Xres / 10 , Xres - Xres / 10 ) :  WPy = Rand( Yres / 10 , Yres - Yres / 10 ) ;neuen WP positionieren
      Color 255 , 0 , 0
      Rect WPx - 10 , WPy - 10 , 20 , 20 , 0 ;WP malen
      Color 0 , 255 , 255
   EndIf
   
   WaitTimer timer
Wend
End

nX^

BeitragFr, Mai 12, 2006 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Nett, aber wenn er den Waypoint knapp verfehlt dann hängt er ... Er zieht immer Kreise um den Waypoint aber trifft ihn nicht.

stfighter01

BeitragFr, Mai 12, 2006 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde keine waypoints machen, sondern einfach zeitgesteuerte bewegungen.
2 sek. eine kurve im uhrseigersinn, 3 sekunden gegen den uhrzeigersinn, 0.5 sek gerade nach oben, 1 sek. gerade nach unten.

wenn du das ganze ordentlich mit den anderen bewegungen synchronisierst, dann kommt auch immer das exakt gleiche bewegungsmuster zustande.

das ist einfach zum schreiben und die levels sind dann einfach zu designen, weil dann jede bewegung rund aussieht.


mfg stfighter
Denken hilft!

Vincent

BeitragFr, Mai 12, 2006 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
.. das mit dem umkreisten habe ich schon beschrieben ... muss man halt beim eerzeugen im editor aufpassen oder eine abfrage im spiel amchen, die dann den wert kurven# verändert.
habe mit diesem system gute erfahrung gemacht.
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt !
 

FreizeitCoder

BeitragSa, Mai 13, 2006 10:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Es sind beide Systeme gute Vorschläge!
Ich werde sehen welches am günstigsten für mein spiel ist Wink

Danke für die Hilfe.

x-pressive

BeitragSo, Mai 21, 2006 8:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrow Speichere, um wie viele Pixel dein Spiel bisher "gescrollt" wurde.

Arrow Jeder Gegner hat seinen eigenen Aktivierungs-Scrollwert. Das heisst, wenn das Spiel z.B. um 50 Pixel gescrollt hat, wird dieser oder jener Gegner aktiviert (alternativ auch Aktivierung über Zeit).

Arrow Eine weiche, Shooter-typische Flugbahn bekommst du entweder mit Sin/Cos-Flugbahnen hin (die Parameter bestimmen die Flugcharakteristik) oder du benutzt, wie schon gesagt, Waypoints.

Arrow Wenn du Waypoints benutzt, kannst du die Schiffe mit einer Bezier-Spline-Formel weich zwischen diesen Punkten fliegen lassen. Suche mal nach "Bezier" oder "Spline". Da reicht es z.B. pro Gegner nur vier Waypoints zu definieren.

Arrow Die Waypoints kannst du erst beim Aktivieren eines Gegners setzen -und zwar am besten dort, wo der Spieler sich gerade befindet. Dann fliegen die Gegner einigermassen auf den Spieler zu und treiben ihn in die Enge.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Goodjee

BeitragSo, Mai 21, 2006 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Arrow Die Waypoints kannst du erst beim Aktivieren eines Gegners setzen -und zwar am besten dort, wo der Spieler sich gerade befindet. Dann fliegen die Gegner einigermassen auf den Spieler zu und treiben ihn in die Enge.
Enge.


dann kannst du auch gleich immer auf den spieler zusteuern lassen..ohne waypoints...oO(es sei denn man bezeichnet das ziel auch als waypoint)
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

x-pressive

BeitragSo, Mai 21, 2006 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, das ist ein Unterschied, ob ein Gegner schnurstracks immer auf einen zusteuert (das nervt!), oder nur an die Position steuert, an der der Spieler sich in dem Augenblick aufgehalten hat, als der Gegner ins Bild kam. Und genau von solchen Unterschieden im Flugverhalten lebt ein Shooter.

Wenn du die Flugbahn beider Methoden mal mit einem Diagramm (oder direkt auf dem Screen) aufzeichnest, siehst du den Unterschied.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Bob

BeitragMi, Mai 24, 2006 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

deine ursprüngliche Idee diverse vorgefertigte Flugmuster zu zu verwenden ist garnicht schlecht.
Allerdings würde ich die Flugmuster nicht unbedingt zwingend an
immer dieselben Schiffstypen koppeln.
Die Flugmuster sollten darüberhinaus nicht mit absoluten Positionswerten gekoppelt werden und nicht die ganze Strecke von oben nach unten beschreiben.

Ich würde z.B. beim erscheinen eines Gegners per Zufall ein Muster auswählen (Z.B Waypoint).
Ist das Muster abgearbeitet wird das Nächste Muster
ausgewählt. z.B. Kreis. usw.usw.

Der Vorteil liegt darin dass dem Spieler nach einer Zeit zwar die Flugmuster bekannt sind, er aber nie weis welches Schiff welches Manöver als nächstes fliegt. Die Gegner bleiben unberechenbarer.
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON

x-pressive

BeitragDo, Mai 25, 2006 11:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber bei einem Shooter ist die Flugbahn der Gegner meist immer die selbe -also genauer gesagt: wenn man öfter spielt, weiss man genau, WANN und WO ein Feind kommt und WIE dieser sich bewegt. Und ich finde, das ist auch wichtig, denn nur so macht das Spielen spass, wenn man öfter gespielt hat und man genau weiss, wie man fliegen muss, um weiter zu kommen. Da flutscht das dann richtig. Auch die alten Arcade-Automaten-Shooter waren nach dem Prinzip gestaltet (ebenso DemonStar und Raptor, meine persönlichen Kult-Shooter). Ich finde das besser, als Zufalls-Flugmuster.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Digi_

BeitragFr, Mai 26, 2006 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei nur 5min Spielzeit würde das Spiel, bei festgelegten Flugmustern, sehr schnell langweilig werden. Oder etwa nicht?
Sonst unbedingt festgelegte Flugmuster! Smile

x-pressive

BeitragFr, Mai 26, 2006 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Spiel soll nur 5 Minuten dauern Question Okay, dann wären vielleicht Zufalls-Bewegungen besser. Shocked
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group