Tutorial Christian Im Winkel schiesen?
Übersicht

NukleusBetreff: Tutorial Christian Im Winkel schiesen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
:shock:
Auf der BB Buch CD von Rene ist ein Tutorial mit Namen Steuerung Ein Raumschiff dreht sich um 360 Crad wenn man jetzt für waffeX und Y X+n*Sin(Spieler\grad),Y+n*Cos(spieler\grad) bei Drawimage angibt schaffe ich es zwar das Schussbild vor dem Raumschiff darzustellen(währen es dreht) aber beim versuch für Waffe each Waffe oder weapon komm ich nich weiter für Types hab ich x,y,speed,fire und Bild ist nicht animiert wenn jemand das Tutorial um schießen erweitern könnte wär das Klasse |
||
![]() |
BBPro |
![]() Antworten mit Zitat ![]() |
---|---|---|
und dann noch bitte um gegner, powerups, scrollen, level, endgegner, hauptmenü und 3d engine erweitern wenns geht ![]() im klartext: selbst ausprobieren - nicht arbeiten lassen cu |
||
Nukleus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
:roll:
Ja schön und gut Avatar das Game läuft im Moment mit 4Fach Scrolling Die Gegner KI steht schon und die Steuerung funktioniert auch anders wie beim Original (rückwärts fahren driften um die eigen Achse) da ich mich mit Types nicht besonders gut auskenne bräuchte ich entweder ein gutes Tutorial (bezüglich schießen mit New und each Eintrag) oder jemand der das besser kann wer lust hat mitzuwirken das Spiel wird MetaliuM heißen. Bei interesse werd ich den Sourcecode hier rein posten (Ca.8Seiten) |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vieleicht hilft dir das weiter ...
Code: [AUSKLAPPEN] ;Rakete Ziel Blitz2D Example von Markus Rauch ;Tasten Links/Rechts steuert Schiff 1 ;Maus Left schieß immer auf Schiff 2 ;Maus Rechts schieß auf das Schiff wo cursor drüber ist ;MR 12.05.2003 Graphics 640,480,16,0 SetBuffer BackBuffer() Type RaketeType Field px# Field py# Field dx# Field dy# Field speed# Field speedmax# Field w# Field range# Field TargetSchiff.SchiffType Field Staerke# End Type Type SchiffType Field Name$ Field px# Field py# Field dx# Field dy# Field speed# Field speedmax# Field w# Field FarbeR Field FarbeG Field FarbeB Field Staerke# Field Sinkt End Type Type BumType Field x#,y# Field TargetSchiff.SchiffType Field TimeOut End Type Global Schiff.SchiffType Global Rakete.RaketeType Global Bum.BumType SchiffNeu "1",320,300,260,1,200,0,255,0 ;Von hier wird geballert SchiffNeu "2",320,100,200,2,200,255,0,0 ;Ziel SchiffNeu "3",220,100,100,2,200,0,0,255 ;Ziel ;------------------------------------------------------------------- MainLoop End ;------------------------------------------------------------------- Function MainLoop() Local PlayerSchiff1.SchiffType=SchiffFind("1") Local PlayerSchiff2.SchiffType=SchiffFind("2") Local mx,my While Not KeyHit(1) mx=MouseX() my=MouseY() Cls ;--------------------------------------------- Schiff 1 lenken If KeyDown(203) Then If PlayerSchiff1<>Null Then If PlayerSchiff1\Sinkt=False Then PlayerSchiff1\w=PlayerSchiff1\w+2 If PlayerSchiff1\w>360 Then PlayerSchiff1\w=PlayerSchiff1\w-360 PlayerSchiff1\dx=Sin(PlayerSchiff1\w) PlayerSchiff1\dy=Cos(PlayerSchiff1\w) EndIf EndIf EndIf If KeyDown(205) Then If PlayerSchiff1<>Null Then If PlayerSchiff1\Sinkt=False Then PlayerSchiff1\w=PlayerSchiff1\w-2 If PlayerSchiff1\w<0 Then PlayerSchiff1\w=PlayerSchiff1\w+360 PlayerSchiff1\dx=Sin(PlayerSchiff1\w) PlayerSchiff1\dy=Cos(PlayerSchiff1\w) EndIf EndIf EndIf ;--------------------------------------------- SchiffeUpdate SchiffeZeigen BumUpdate BumZeigen RaketenUpdate RaketenZeigen ;--------------------------------------------- ;Immer auf Schiff 2 If MouseHit(1) Then RaketeNeu SchiffFind("1"),SchiffFind("2"),50 EndIf ;Auf Schiff wo Maus ist If MouseHit(2) Then RaketeNeu SchiffFind("1"),SchiffFindXY(mx,my,40),50 EndIf ;--------------------------------------------- Color 255,255,255 Oval mx-5,my-5,10,10,False ;--------------------------------------------- Delay 20 Flip Wend Delete Each SchiffType Delete Each RaketeType Delete Each BumType End Function Function SchiffNeu(Name$,px#,py#,winkel#,speed#,staerke#,r,g,b) ;Neues Schiff bauen Schiff.SchiffType=New SchiffType Schiff\Name$=Name$ Schiff\px=px Schiff\py=py Schiff\dx=Sin(winkel) Schiff\dy=Cos(winkel) Schiff\w=winkel Schiff\speed=speed Schiff\staerke=staerke Schiff\FarbeR=R Schiff\FarbeG=G Schiff\FarbeB=B Schiff\Sinkt=False End Function Function SchiffeUpdate() ;Schiffe bewegen For Schiff.SchiffType =Each SchiffType If Schiff\Sinkt=False Then If Schiff\Speed<Schiff\SpeedMax Then Schiff\Speed=Schiff\Speed+0.1 Schiff\px=Schiff\px+Schiff\dx*Schiff\speed Schiff\py=Schiff\py+Schiff\dy*Schiff\speed If Schiff\px<0 Then Schiff\px=Schiff\px+GraphicsWidth() If Schiff\py<0 Then Schiff\py=Schiff\py+GraphicsHeight() If Schiff\px>GraphicsWidth() -1 Then Schiff\px=Schiff\px-GraphicsWidth() If Schiff\py>GraphicsHeight()-1 Then Schiff\py=Schiff\py-GraphicsHeight() EndIf Next End Function Function SchiffFind.SchiffType(Name$) ;Schiffnamen suchen und SchiffType zurück geben For Schiff.SchiffType =Each SchiffType If Schiff\Name$=Name$ Then Return Schiff Next Return Null End Function Function SchiffFindXY.SchiffType(px#,py#,ra#) ;Schiffnamen suchen und SchiffType zurück geben For Schiff.SchiffType =Each SchiffType If Entf(px,py,Schiff\px,Schiff\py)<=ra Then Return Schiff Next Return Null End Function Function RaketeNeu(SS.SchiffType,SZ.SchiffType,staerke#) ;Neue Rakete starten , erstmal mit Winkel wie Schiff :-) If ss=Null Or sz=Null Then Return 0 If ss=sz Then Return 0 ;auf sich selber schießen wäre doof ;-) Rakete.RaketeType=New RaketeType Rakete\px=ss\px Rakete\py=ss\py Rakete\w=ss\w Rakete\dx=ss\dx Rakete\dy=ss\dy Rakete\speed=0 Rakete\speedmax=10 Rakete\range=200 Rakete\staerke=staerke Rakete\TargetSchiff=sz Return True End Function Function RaketenUpdate() ;Beschleunig die Rakete und bewegt sie bis der Treibstoff alle ist ;Dann wird sie langsamer und verschwindet Local Weg For Rakete.RaketeType =Each RaketeType Weg=0 RaketeZielUpdate Rakete If Rakete\Speed<Rakete\SpeedMax Then Rakete\Speed=Rakete\Speed+0.1:If Rakete\Speed>Rakete\SpeedMax Then Rakete\Speed=Rakete\SpeedMax Rakete\px=Rakete\px+Rakete\dx*Rakete\speed Rakete\py=Rakete\py+Rakete\dy*Rakete\speed If Rakete\TargetSchiff<>Null Then If Entf(Rakete\px,Rakete\py,Rakete\TargetSchiff\px,Rakete\TargetSchiff\py)<10 Then BumNew Rakete\px,Rakete\py,Rakete\TargetSchiff,Rakete\Staerke Weg=True EndIf EndIf If Rakete\range>0 Then Rakete\range=Rakete\range-Rakete\Speed ;Flugdauer begrenzen If Rakete\range<=0 Then If Rakete\Speed>0 Then Rakete\Speed=Rakete\Speed-0.25 ;kein Treibstoff mehr If Rakete\Speed<=0 Then Weg=True ;Hokus Pokus EndIf If Weg=True Then RaketeFree Rakete Next End Function Function RaketeFree(R.RaketeType) ;Rakete freigeben Delete R End Function Function RaketeZielUpdate(R.RaketeType) If r\TargetSchiff=Null Then Return ;Schiff gibt es nicht mehr dann einfach weiter fliegen lassen mit letztem Kurs ;neuen Kurs für die Rakete ausrechnen Local dx#,dy# dx=r\TargetSchiff\px-r\px dy=r\TargetSchiff\py-r\py Local wneu# Local walt# Local wd# walt=R\W wneu=ATan2(dx,dy) Local inc#=(r\speedmax/r\speed)*2.0+5.0 R\W=curveangle#( wneu,walt,inc) r\dx=Sin(R\W) r\dy=Cos(R\W) ;Richtung zum Ziel ;Local l=300 ;Color 128,128,128 ;Line r\px,r\py,r\px+(l*r\dx) , r\py+(l*r\dy) End Function Function RaketenZeigen() ;Alle Raketen zeigen For Rakete.RaketeType =Each RaketeType RaketeZeigen Rakete Next End Function Function RaketeZeigen(R.RaketeType) Local l#=10 ;Länge Rakete Color 255,255,0 ;Schweif in die entgegengesetzte Richtung ! Line r\px, r\py , r\px-(l*r\dx) , r\py-(l*r\dy) ;Punkt alt Raketenkopf :-) Color 255,0,0 Plot r\px,r\py End Function Function SchiffeZeigen() ;Zeigt alle Schiffe For Schiff.SchiffType =Each SchiffType SchiffZeigen Schiff Next End Function Function SchiffZeigen(S.SchiffType) ;zeichnet das Schiff Local l=20 ;Schiff länge If S\Sinkt=False Then Color s\FarbeR,s\FarbeG,s\FarbeB Else Color 128,128,128 EndIf Line s\px,s\py,s\px-s\dx*l,s\py-s\dy*l ;Kopf des Schiffes Color 255,255,255 Plot s\px,s\py End Function Function BumNew(x,y,S.SchiffType,Staerke#) ;Neuen Treffer zeigen und Ziel an Staerke abziehen , wenn Ziel kaputt dann wird Schiff\Sinkt=True Bum.BumType=New BumType Bum\TimeOut=100 Bum\x=x Bum\y=y Bum\TargetSchiff=s If Bum\TargetSchiff\Staerke>0 Then Bum\TargetSchiff\Staerke=Bum\TargetSchiff\Staerke-Staerke If Bum\TargetSchiff\Staerke<=0 Then Bum\TargetSchiff\Staerke=0:Bum\TargetSchiff\Sinkt=True EndIf End Function Function BumUpdate() ;Treffer sollen nicht ewig sichtbar sein For Bum.BumType=Each BumType If Bum\TimeOut>0 Then Bum\TimeOut=Bum\TimeOut-1 Else Delete Bum EndIf Next End Function Function BumZeigen() ;Treffer zeigen Local x#,y# For Bum.BumType=Each BumType Color 255,255,0 x=Bum\x y=Bum\y Oval x-4,y-4,8,8 Next End Function Function curveangle#(newangle#,oldangle#,increments#) ;Elegante Lösung um die Winkel differenz heraus zu bekommen ;Mit increments kann man die gesamt Winkeldifferenz teilen das kleine Schritte möglich sind If (oldangle+360)-newangle<NEWANGLE-OLDANGLE Then OLDANGLE=360+OLDANGLE If (newangle+360)-oldangle<OLDANGLE-NEWANGLE Then NEWANGLE=360+NEWANGLE oldangle=oldangle-(oldangle-newangle)/increments Return oldangle End Function Function Entf#(x1#,y1#,x2#,y2#) ;Entfernung zwischen Punkt 1 und 2 Local dx#,dy# dx=x2-x1 dy=y2-y1 Return Sqr(dx*dx+dy*dy) End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group