geskriptete Gegnerbewegung
Übersicht

FreizeitCoderBetreff: geskriptete Gegnerbewegung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich will mich diesmal an einem Arbeitsplatz geeigneten SpaceShooter versuchen! Etwas kleines für die 5min zwischendurch also. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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^ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nett, aber wenn er den Waypoint knapp verfehlt dann hängt er ... Er zieht immer Kreise um den Waypoint aber trifft ihn nicht. | ||
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
.. 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es sind beide Systeme gute Vorschläge!
Ich werde sehen welches am günstigsten für mein spiel ist ![]() Danke für die Hilfe. |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() ![]() ![]() ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei nur 5min Spielzeit würde das Spiel, bei festgelegten Flugmustern, sehr schnell langweilig werden. Oder etwa nicht?
Sonst unbedingt festgelegte Flugmuster! ![]() |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Spiel soll nur 5 Minuten dauern ![]() ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group