Gegner nähert sich Player
Übersicht

TrunxxBetreff: Gegner nähert sich Player |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Ich hab ein Problem finde selbst aber keine Lösung dazu. Und zwar habe ich ein Rect vom Computer und ein Rect vom Player. Das Rect des Players kann (durch den Player) bewegt werden und das Rect des Computers soll ihm nachfolgen. Jetzt habe ich aber überhaupt keine Ahnung wie ich das Lösen könnte oder wo ich Informationen zur Lösung finden kann. Ich hoffe ihr könnt mir weiterhelfen ![]() Achja, lassen sich eigentlich zwei Rects auf Kollision prüfen? Durch einen Befehl oder muss ich Abfragen ob sich die Pixel überlagern? Grüsse, Trunxx |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu 1.
Code: [AUSKLAPPEN] if x1 < x2 then
x1 = x1 +1 else x1 = x1 -1 end if das gleiche noch für y ist das einfachste ..... besser gehts mit sin und cos zu 2 Code: [AUSKLAPPEN] rectsoverlab ......
einfach mal in der hilfe nachsehen..... |
||
[BB2D | BB3D | BB+]
|
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
OK die Lösung ist „Nachdenken“. Nehmen wir an einer „rennt“ vor dir weg – was machst du? – „schaust“ wo er hinrennt. Jetzt „rennst“ du hinterher. Nun das ganze am PC. Der „Gegner“ schaut wo du bist und bewegt sich (so schnell du es ihm erlaubst) in deine Richtung – fertig. Du kennst ja die Position des "Spielers". Kolli – klar gibt es die hier schau mal auf diese Seite http://www.blitzbase.de/4a.htm. Da gehst du auf „Image“ dann auf "ImageRectCollide" und/oder auf "ImageRectOverlap". Edit: Nein da war einer schneller ![]() ![]() |
||
![]() |
Bms |
![]() Antworten mit Zitat ![]() |
---|---|---|
und ein fettes beispiel:
Code: [AUSKLAPPEN] ;"Gegner - Ki - SImulation" von bms Graphics 640,480,16,1 ;Schiff machen ;============= TFormFilter 0 schiff=CreateImage(10,15) SetBuffer ImageBuffer(schiff) Line 5,0,0,14 Line 5,0,9,14 Line 0,14,9,14 Fill(5,5,$FF000000,$FF00FFFF) RotateImage schiff,90 SetBuffer BackBuffer() ;Schiff drehen ;============= Dim dreh(119) For a=0 To 119 dreh(a)=CopyImage(schiff) MidHandle dreh(a) RotateImage dreh(a),a*3 Next FreeImage schiff ;Sterne ;============= SeedRnd MilliSecs() Const staranz=19 Dim stars(staranz,3) For a=0 To staranz stars(a,0)=Rand(-300,940) stars(a,1)=Rand(-300,780) stars(a,2)=Rand(512) stars(a,3)=Rand(5) Next ;Gegner ;============= r=1000 Const geganz=99 Dim gegner#(geganz,3) For a=0 To geganz gegner(a,0)=Rand(0-r,800+r) gegner(a,1)=Rand(0-r,600+r) gegner(a,2)=ATan2(gegner(a,1)-y#,gegner(a,0)-x#) gegner(a,3)=Rnd(0.5,1.8) Next ;Gegnerbild ;============= gegschiff=CreateImage(20,20) SetBuffer ImageBuffer(gegschiff) Color 0,0,255 Oval 0,0,20,20 Color 255,0,0 Rect 4,4,12,3 Rect 4,12,12,3 SetBuffer BackBuffer() Dim gegdreh(119) For a=0 To 119 gegdreh(a)=CopyImage(gegschiff) MidHandle gegdreh(a) RotateImage gegdreh(a),a*3 Next FreeImage gegschiff ;Schüsse ;============= Dim shoots#(100,2) schussschnell=1 ;Items ;============= Dim items(4,2) ;X,Y,g ;============= x#=320 y#=240 g#=0 schnell=2 ;============= ;====^^^^^==== ;====Start==== ;============= ;============= ;============= ;============= ;====Spiel==== ;====VVVVV==== ;============= SeedRnd MilliSecs() SetBuffer BackBuffer() Repeat ;Hintergrund: Sterne ;============= Cls For a=0 To staranz ;Farbe festlegen Color stars(a,2)/2,stars(a,2)/2,stars(a,2)/2 ;Stern malen Rect stars(a,0)-x#/stars(a,3),stars(a,1)-y#/stars(a,3),1,1 ;Lebensdauer verkürzen stars(a,2)=stars(a,2)-1 ;Star resetten If stars(a,2)=0 Then stars(a,0)=Rand(-300,940) : stars(a,1)=Rand(-300,780) : stars(a,2)=512 Next ;Drehen ;============= If KeyDown(203)Then dr=dr-1 If KeyDown(205)Then dr=dr+1 If dr<0 Then dr=119 If dr>119 Then dr=0 ;Fahren ;============= If KeyDown(200)Then g#=g#+0.05 If KeyDown(208)Then g#=g#-0.05 ;Maximale Geschwindigkeit If g#>schnell Then g#=schnell If g#<-schnell/2 Then g#=-schnell/2 ;Langsamer werden If g#>0 Then g#=g#-.02 If g#<0 Then g#=g#+.02 ;Rand ;============= ;Rechts If x<7 Then x=7 ;Links If x>633 Then x=633 ;Oben If y<7 Then y=7 ;Unten If y>473 Then y=473 ;Schießen ;============= If KeyDown(57)Then wait=wait+1 ;schnelligk. begrenzen If wait>schussschnell Then wait=0 ;Schuss If wait=schussschnell Then If shootmode>2 Then shootmode=2 wait=0 Select shootmode Case 0 ;1 Schuss - shoots(nr,0)=x# shoots(nr,1)=y# shoots(nr,2)=dr*3 Case 1 ;2 Schüsse - - shoots(nr,0)=x# shoots(nr,1)=y# shoots(nr,2)=dr*3 nr=(nr+1)Mod 101 shoots(nr,0)=x# shoots(nr,1)=y# shoots(nr,2)=dr*3-180 Case 2 ;3 Schüsse -< shoots(nr,0)=x# shoots(nr,1)=y# shoots(nr,2)=dr*3 nr=(nr+1)Mod 101 shoots(nr,0)=x# shoots(nr,1)=y# shoots(nr,2)=dr*3-90 nr=(nr+1)Mod 101 shoots(nr,0)=x# shoots(nr,1)=y# shoots(nr,2)=dr*3+90 End Select ;Nr updaten nr=(nr+1)Mod 101 EndIf ;Shoots ;============= Color 255,0,0 For a=0 To 100 If shoots(a,0)+shoots(a,1)>0 Then ;Moven shoots(a,0)=shoots(a,0)+Cos#(shoots(a,2))*6 shoots(a,1)=shoots(a,1)+Sin#(shoots(a,2))*6 ;malen Oval shoots(a,0),shoots(a,1),4,4 ;Explo?? For b=0 To geganz If RectsOverlap(shoots(a,0),shoots(a,1),4,4,gegner(b,0),gegner(b,1),20,20)Then ;schuss weg shoots(a,0)=0:shoots(a,1)=0 ;gegner reset gegner(b,0)=Rand(0-r,800+r) gegner(b,1)=Rand(0-r,600+r) gegner(b,2)=ATan2(gegner(b,1)-y#,gegner(b,0)-x#) gegner(b,3)=Rnd(schnell-1.5,schnell) EndIf Next EndIf Next ;Gegner ;============= Color 0,0,255 For a=0 To geganz ;zum Spieler hingucken gegner(a,2)=(ATan2(gegner(a,1)-y#,gegner(a,0)-x#)+180)Mod 359 ;moven gegner(a,0)=gegner(a,0)+Cos#(gegner(a,2))*gegner(a,3) gegner(a,1)=gegner(a,1)+Sin#(gegner(a,2))*gegner(a,3) ;bild vorbereiten xxx=(gegner(a,2))/3 If xxx<0 Then xxx=119 If xxx>119 Then xxx=0 ;gegner malen DrawImage gegdreh(xxx), gegner(a,0), gegner(a,1) Next ;Items ;============= For a=0 To 4 ;Resetten If items(a,0)=0 Then items(a,0)=Rand(630) : items(a,1)=Rand(470) : items(a,2)=Rand(3)-1 ;Farbe Color 0,100+items(a,2)*50,0 ;Malen Oval items(a,0),items(a,1),10,10 ;Eingesammelt? If ImageRectOverlap(dreh(dr),x#,y#,items(a,0),items(a,1),10,10)Then ;Resetten items(a,0)=Rand(630) : items(a,1)=Rand(470) : items(a,2)=Rand(3)-1 ;Neue Art fc=Rand(13) Select fc Case 1,2,3,4 schussschnell=schussschnell-1 Case 5,6,7,8 shootmode=shootmode+1 Case 9,10,11,12 schnell=schnell+1 End Select ;Shootmode begrenzen If shootmode>2 Then shootmode=2 ;Schnelligkeit begrenzen If schnell>6 Then schnell=6 ;Schussschnell begrenzen If schussschnell<1 Then schussschnell=1 EndIf Next ;Schiff bewegen ;============= x#=x#+Cos#(dr*3)*g# y#=y#+Sin#(dr*3)*g# ;Schiff malen ;============= DrawImage dreh(dr),x#,y# ;Flibben ;============= Text 0,0,"Mode: "+shootmode+" XXX Schnelligkeit: "+schnell+" XXX Schusschnelligk. "+schussschnell Flip 0 Until KeyHit(1) End ;============= ;====^^^^^==== ;====Spiel==== ;============= ;============= ;============= ;============= ;=Funktionen== ;====VVVVV==== ;============= ;============= ;============= ;Funktionen ;============= ;============= Function Fill(x,y,col1,col2) If x>0 Then If ReadPixel(x-1,y)=col1 Then WritePixel x-1,y,col2 : Fill(x-1,y,col1,col2) EndIf If y>0 Then If ReadPixel(x,y-1)=col1 Then WritePixel x,y-1,col2 : Fill(x,y-1,col1,col2) EndIf If x<9 Then If ReadPixel(x+1,y)=col1 Then WritePixel x+1,y,col2 : Fill(x+1,y,col1,col2) EndIf If y<14 Then If ReadPixel(x,y+1)=col1 Then WritePixel x,y+1,col2 : Fill(x,y+1,col1,col2) EndIf End Function |
||
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group