Panzer Physik V1.2
Übersicht

![]() |
ToeBBetreff: Panzer Physik V1.2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mal wieder ein neues Project aufgemacht und da wollte ich mal das Panzerfahren realistischer machen. Dazu habe ich mich unter anderem auch der Verlet berechnung bedient. Es functioniert so, das ketten und Panzer getrennt sind. Auch sind die zwei Ketten getrennt. Also 3 teile. Jetzt hat jede Kette eine Geschwindigkeit S (+/-) , eine Position und einen Winkel und den ABstand zu 0 (dem Panzer). Jetzt wird zum beispiel die rechte Kette bewegt (er soll sich im kreis drehen). Dazu wird jetzt der Winkel zu 0 (panzer) gemessen und die Kette schonmal angepasst (winkel+90). Die andere Kette auch. Dann wird der Abstand zur anderen Kette gemessen und der Panzer auf halber strecke positioniert. Dann werden (wie bei Verlet) die beiden Ketten auf ursprüngliche Position zurückgesetz. Das gute daran ist das alles berechnet wird und man nix mehr hard coden muss (so wie bei tastendruck 17 den panzer um 2 pixel verschieben oder bei drehen dann gucken welche geschwindigkeit der drauf hat und abbremsen etc. braucht man hier alles nicht)
Ich Wollte das mal für andere hier reinstellen dies gebrauchen könnten. Bitte meldet mir mal zurück was man noch besser machen kann oder was unlogisch wirkt. Danke ![]() Hier der Download (mit Dateien,BB-Code und Exe) : Download PanzerPhys.rar Einen Screen Poste ich hier bewuss nicht da man nicht mehr als einen Panzer auf einem leeren Bildschirm sieht... Und hier der Code : Code: [AUSKLAPPEN] Include "Draw3D.bb"
Global GWidth = 800 Global GHeight = 600 Global GModi = 2 Global GScale# = 16/9. Graphics3D GWidth,GHeight,32,GModi SetBuffer BackBuffer() ;CONSTS/ Const TankMaxSpeed# = 2 ;ARRAYS/ Dim TANK_IMAGE(0),SHOT_IMAGE(0) ;TYPES/TANK Type tank Field typ Field x#,y#,w# Field kx#[1],ky#[1],kw#[1],kr# Field ks#[1] Field gas#[1] Field chain#[1] Field tx#,ty#,tw# Field kox#[1],koy#[1] Field r Field shotms Field leben Field dead,deadms End Type ;TYPES/KI Type ki Field info.tank End Type ;TYPES/SPUR Type spur Field x1#,y1# Field x2#,y2# Field r,g,b Field a# End Type ;CREATE/TIMER Global timer = CreateTimer(60) ;INIT/CAMERA Global CAMERA = CreateCamera() scalex# = 1. scaley# = 1. If GModi = 1 scalex# = GScale / (4/3.0) scaley# = (Float(GWidth) / Float(GHeight)) / (4/3.0) EndIf ScaleEntity(camera,scalex,scaley,scalex) CameraClsColor(CAMERA,64,128,64) DrawInit3D(CAMERA) Origin3D(800,600) ;LOAD/NATIVE/SPUR Global NAT_SPUR = LoadImage3D("gfx\NAT_HUD.PNG",2,2) ;LOAD/IMAGE/PANZER Global TANK_IMAGE_MAIN = LoadImage3D("gfx\TANK_1.PNG") TANK_IMAGE(0) = GrabImage3D(TANK_IMAGE_MAIN,31,32,33,17) GrabImage3D(TANK_IMAGE_MAIN,30,0,34,8) GrabImage3D(TANK_IMAGE_MAIN,31,1,32,6) GrabImage3D(TANK_IMAGE_MAIN,22,13,42,15) ;LOAD/NATIVE/HUD Global NATIVE_HUD = LoadImage3D("gfx\NAT_HUD.PNG",2,2,0) ;LOAD/FONT/HUD Global FONT_HUD = LoadFont3D("gfx\FONT_HUD.PNG") ;Global FONT_HUD = FontRange3D(FONT_HUD_IMAGE) SetFont3D(2,1,1,0) ;CREATE/PLAYER/TANK Global PLAYER.tank = CreateTank() CreateKI() Zoom# = 1 Repeat FPSc=FPSc+1:If FPSms<=MilliSecs()FPS=FPSc:FPSc=0:FPSms=MilliSecs()+999 Text3D FONT_HUD,-400,290,"FPS : "+FPS ;MOVE/TANK Zoom# = Zoom# + MouseZSpeed()/10.0 CameraZoom(CAMERA,Zoom) MOVE1# = 0 MOVE2# = 0 If KeyDown(17) Then If MOVE1 = 0 MOVE1 = 0.05 If MOVE2 = 0 MOVE2 = 0.05 EndIf If KeyDown(31) Then If MOVE2 = 0 MOVE1 = -0.05 If MOVE2 = 0 MOVE2 = -0.05 EndIf If KeyDown(30) Then If MOVE1 <> 0 MOVE1 = MOVE1 * 0.5 Else MOVE1 = -0.05 EndIf If MOVE2 = 0 MOVE2 = 0.05 EndIf EndIf If KeyDown(32) Then If MOVE2 <> 0 MOVE2 = MOVE2 * 0.5 Else MOVE2 = -0.05 EndIf If MOVE1 = 0 MOVE1 = 0.05 EndIf EndIf If MOVE1 < 0 And MOVE2 > 0 MOVE1 = MOVE1 * 0.25 MOVE2 = MOVE2 * 0.25 EndIf If MOVE1 > 0 And MOVE2 < 0 MOVE2 = MOVE2 * 0.25 MOVE1 = MOVE1 * 0.25 EndIf MoveTank(PLAYER,MOVE1,MOVE2) PointTank(PLAYER,MouseX3D,MouseY3D) ;UPDATE/ALL UpdateTank() UpdateSpur() UpdateKI() ;DRAW/ALL DrawSpur() DrawTank() RenderWorld() Flip 0 WaitTimer(timer) Clear3D() Until KeyHit(1) End ;FUNCTIONS/TANK ;FUNCTION/CREATETANK Function CreateTank.tank(TYP=0) tmp.tank = New tank tmp\typ = TYP tmp\x = 0 tmp\y = 0 tmp\kr = 10 tmp\kx[0] = tmp\x - tmp\kr tmp\ky[0] = tmp\y tmp\kx[1] = tmp\x + tmp\kr tmp\ky[1] = tmp\y tmp\kox[0] = tmp\kx[0] tmp\koy[0] = tmp\ky[0] tmp\kox[1] = tmp\kx[1] tmp\koy[1] = tmp\ky[1] tmp\tx = 0 tmp\ty = 0 tmp\w = 270 tmp\kw[0] = 270 tmp\kw[1] = 270 tmp\r = 33/2.0 tmp\leben = 100 Return tmp End Function ;FUNCTION/UPDATETANK Function UpdateTank() For tmp.tank = Each tank tmp\ks[0] = tmp\ks[0] + tmp\gas[0] tmp\ks[1] = tmp\ks[1] + tmp\gas[1] tmp\kx[0] = tmp\kx[0] + Cos(-tmp\kw[0]) * tmp\ks[0] tmp\ky[0] = tmp\ky[0] + Sin(-tmp\kw[0]) * tmp\ks[0] tmp\kx[1] = tmp\kx[1] + Cos(-tmp\kw[1]) * tmp\ks[1] tmp\ky[1] = tmp\ky[1] + Sin(-tmp\kw[1]) * tmp\ks[1] tmp\ks[0] = tmp\ks[0] * 0.98 tmp\ks[1] = tmp\ks[1] * 0.98 If tmp\ks[0] > +TankMaxSpeed tmp\ks[0] = tmp\ks[0] * 0.981 If tmp\ks[0] < -TankMaxSpeed tmp\ks[0] = tmp\ks[0] * 0.981 If tmp\ks[1] > +TankMaxSpeed tmp\ks[1] = tmp\ks[1] * 0.981 If tmp\ks[1] < -TankMaxSpeed tmp\ks[1] = tmp\ks[1] * 0.981 tmp\chain[0] = (tmp\chain[0] + tmp\ks[0]) Mod 32 tmp\chain[1] = (tmp\chain[1] + tmp\ks[1]) Mod 32 ;GET/COLLISION If col_on = 0 For info.tank = Each tank If info <> tmp And info\dead = 0 DX# = info\x-tmp\x DY# = info\y-tmp\y ab# = Sqr(DX*DX+DY*DY) abg# = info\r+tmp\r If ab <= abg abg = abg - ab+1 abw# = ATan2(DY,DX) tmpx# = Cos(abw) tmpy# = Sin(abw) PosTank(tmp,tmp\x-tmpx*abg,tmp\y-tmpy*abg) PosTank(info,info\x+tmpx*abg,info\y+tmpy*abg) tmp\kw[0] = tmp\w tmp\kw[1] = tmp\w Exit EndIf EndIf Next EndIf ;CREATE/SPUR sp.spur = New spur sp\x1 = tmp\kox[0] sp\y1 = tmp\koy[0] sp\x2 = tmp\kx[0] sp\y2 = tmp\ky[0] sp\r = 64 sp\g = 128 sp\b = 64 sp\a = 1 sp.spur = New spur sp\x1 = tmp\kox[1] sp\y1 = tmp\koy[1] sp\x2 = tmp\kx[1] sp\y2 = tmp\ky[1] sp\r = 64 sp\g = 128 sp\b = 64 sp\a = 1 tmp\kox[0] = tmp\kx[0] tmp\koy[0] = tmp\ky[0] tmp\kox[1] = tmp\kx[1] tmp\koy[1] = tmp\ky[1] ;CALC/CHAINS tmpW1# = ATan2(tmp\ky[0]-tmp\y,tmp\kx[0]-tmp\x) tmpW2# = ATan2(tmp\ky[1]-tmp\y,tmp\kx[1]-tmp\x) tmpW3# = ATan2(tmp\ky[1]-tmp\ky[0],tmp\kx[1]-tmp\kx[0]) tmp\w = -tmpW3+90 tmpRX# = tmp\kx[1] - tmp\kx[0] tmpRY# = tmp\ky[1] - tmp\ky[0] tmpR1# = Sqr(tmpRX*tmpRX + tmpRY*tmpRY) tmp\x = tmp\kx[0] + Cos(tmpW3) * tmpR1/2.0 tmp\y = tmp\ky[0] + Sin(tmpW3) * tmpR1/2.0 tmpR2# = (tmp\kr*2-tmpR1) / (tmp\kr*2) tmp\kx[0] = tmp\kx[0] - tmpRX * tmpR2 * 0.5 tmp\ky[0] = tmp\ky[0] - tmpRY * tmpR2 * 0.5 tmp\kx[1] = tmp\kx[1] + tmpRX * tmpR2 * 0.5 tmp\ky[1] = tmp\ky[1] + tmpRY * tmpR2 * 0.5 tmpW# = ATan2(tmp\ky[1]-tmp\ky[0],tmp\kx[1]-tmp\kx[0]) tmp\kw[0] = -tmpW+90 tmp\kw[1] = -tmpW+90 nn = 0 If tmp\x < -400-tmp\r Then nx = 400+tmp\r : ny = tmp\y : nn = 1 If tmp\x > 400+tmp\r Then nx =-400-tmp\r : ny = tmp\y : nn = 1 If tmp\y < -300-tmp\r Then ny = 300+tmp\r : nx = tmp\x : nn = 1 If tmp\y > 300+tmp\r Then ny =-300-tmp\r : nx = tmp\x : nn = 1 If nn PosTank(tmp,nx,ny) Next End Function ;FUNCTION/MOVETANK Function MoveTank(tmp.tank,GAS2#=0,GAS1#=0) tmp\gas[0] = GAS1 tmp\gas[1] = GAS2 End Function ;FUNCTION/POINTTANK Function PointTank(tmp.tank,x#,y#) TX# = tmp\x + tmp\tx TY# = tmp\y + tmp\ty DX# = X# - TX DY# = Y# - TY W# = -ATan2(DY,DX) tmp\tw = w End Function ;FUNCTION/POSTANK Function PosTank(tmp.tank,nx#,ny#) tmp\x = nx tmp\y = ny tmp\kx[0] = tmp\x + Cos(-tmp\w-90) * tmp\kr tmp\ky[0] = tmp\y + Sin(-tmp\w-90) * tmp\kr tmp\kx[1] = tmp\x + Cos(-tmp\w+90) * tmp\kr tmp\ky[1] = tmp\y + Sin(-tmp\w+90) * tmp\kr tmp\kox[0] = tmp\kx[0] tmp\koy[0] = tmp\ky[0] tmp\kox[1] = tmp\kx[1] tmp\koy[1] = tmp\ky[1] End Function ;FUNCTION/DRAWTANK Function DrawTank() For tmp.tank = Each tank If tmp\dead = 0 ColorG3D(255,255,255,1) DrawImage3D(TANK_IMAGE(tmp\typ),tmp\kx[0],tmp\ky[0],0,tmp\kw[0],1, 1) DrawRect3D(TANK_IMAGE(tmp\typ),tmp\kx[0],tmp\ky[0],-tmp\chain[0],58,32,6,0,tmp\kw[0]) DrawImage3D(TANK_IMAGE(tmp\typ),tmp\kx[1],tmp\ky[1],0,tmp\kw[1],1, 1) DrawRect3D(TANK_IMAGE(tmp\typ),tmp\kx[1],tmp\ky[1],tmp\chain[1],58,32,6,0,tmp\kw[1]+180) ColorG3D(128,128,255,1) DrawImage3D(TANK_IMAGE(tmp\Typ),tmp\x,tmp\y,0,tmp\w) DrawImage3D(TANK_IMAGE(tmp\typ),tmp\x+tmp\tx,tmp\y+tmp\ty,0,tmp\tw,1,3) EndIf Next End Function ;FUNCTION/UPADTESPUR Function UpdateSpur() For tmp.spur = Each spur tmp\a = tmp\a -0.01 If tmp\a <=0 Then Delete tmp Next End Function ;FUNCTION/DRAWSPUR Function DrawSpur() For tmp.spur = Each spur ColorN3D(tmp\r,tmp\g,tmp\b,tmp\a) Line3D(NAT_SPUR,tmp\x1,tmp\y1,tmp\x2,tmp\y2) Next End Function ;FUNCTION/CREATEKI Function CreateKI() tmp.KI = New KI tmp\info = CreateTank() End Function ;FUNCTION/UPDATEKI Function UpdateKI() For tmp.KI = Each KI MoveTank(tmp\info,0.05,0.025) PointTank(tmp\info,PLAYER\x,PLAYER\y) Next End Function Viel Spaß =) mfg ToeB |
||
- Zuletzt bearbeitet von ToeB am Fr, Okt 02, 2009 21:52, insgesamt 5-mal bearbeitet
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schöne Sache ![]() Allerdings besitzt noch nicht jeder Draw3D2 ![]() Edit: Ich seh grad, im Archiv ist sie ja dabei. Ich weiß aber nicht, was hectic davon hält. |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh mist ![]() Ich geb schnell mal die alte mit .... Danke für den Hinweis ![]() Edit : So jetzt die veröffentliche Version der Draw3D2 beigegeben...Hoffe hectic hat nix dagegen ? Auch habe ich noch bewegliche ketten hinzugefügt, damit das ganze etwas belebter wirkt, die drehen sich jetzt genau zur geschwindigkeit. mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/foru...hp?t=17380
Es gibt kein Copyright auf im Codearchiv gepostete Codes. Sieht schon ganz nett aus aber ich finde die drehungen iwie zu eierig. ;D |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja gut dann denk dir das (C) vor der Exe und dem code weg ^^
Warum zu eierig ? was meinst du damit ? mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finds eigendlich nicht so schön wenn die Draw3D2 hier beiliegt. Außerdem ist es eine Uraltversion. Bis heute hab ich ja fast alles noch einmal durchgearbeitet. Und selbst die zur Zeit aktuelle ist noch Beta. Wenn jetzt die Leute mit der Uralt-Version anfangen zu arbeiten wird die Verwirrung groß sein.
Es wäre zumindest was anderes gewesen, wenn neue Funktionen benutzt worden wären, die unter der Draw3D V.3.2 nicht lauffähig sind. Das ist hier aber nicht der Fall. Man kann den selben Panzer-Code mit folgenden Änderungen auch unter der Draw3D V.3.2 zum laufen bekommen (damit können dann Interessierte auch was anfangen, da die Draw3D V.3.2 von mir ja noch ''offiziel supportet'' wird ![]() Zeile 1 wird zu Code: [AUSKLAPPEN] Include "Draw3D.bb"
Zeilen 50 bis 52 werden zu Code: [AUSKLAPPEN] Global FONT_HUD = LoadFont3D("gfx\FONT_HUD.PNG")
;Global FONT_HUD = FontRange3D(FONT_HUD_IMAGE) SetFont3D(2,1,1,0) Daher bitte ich dich das zu ändern. Ansonsten finde ich den Panzer gut umgesetzt. Fürs Codearchiv würde ich es aber besser finden, wenn der Panzer möglichst einfach gehalten und nicht über ein Multyplayerfähiges-Type angesprochen wird. Ist zwar gut gemacht, aber diejenigen die etwas lernen wollen hängen dann mit viel Codezeilen rum die sie vielleicht nicht verstehen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
So habe ich geändert und noch direct ein kleines Update mit hochgekladen.
Jetzt kann man sich den Panzer aus der nähe angucken ... und ne Kanone ist auch drauf. Die version ohne Types werde ich noch machen, brauch ich aber noch etwas für... ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sieht ganz nett aus, aber iwie ist das Ding auf nem Eisboden?
Der Panzer rutscht noch lange rum nachdem ich kein "Gas" mehr gebe mfg ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja da musst du nur den "Abbrems Faktor" in der "UpdateTank" Function ändern :
Code: [AUSKLAPPEN] tmp\ks[0] = tmp\ks[0] * 0.981
tmp\ks[1] = tmp\ks[1] * 0.981 Da wird die geschwindigkeit verringert. Möchtest du zum beispiel ein sehr unebens Terrain befahren änderst du den Faktor in 0.9 oder 0.8. Nur um so näher er an 1 ist umso langsamer wird die Fahrt verringert und um so näher an null um so schneller bremmst der ab... mfg ToeB EDIT : So es gibt eine neue Version : [+] Spuren [+] Kollision [+] [Zoom] [_] Speed angespasst (realistischer), panzer rutscht nicht mehr so rum [+] anderen CPU-Panzer zum testen Mein Spiel dazu macht auch fortschritte, man kann schon gegen den CPU panzer kämpfen (Schüsse / Leben / Tod / REspawn sind drin). UAch ist eine Particle Engine eingebaut, welche Explosionen und rauch effecte simuliert. mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Seehr geil! =) | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group