[B3D] Physik 4WD Buggy in 2D

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: [B3D] Physik 4WD Buggy in 2D

BeitragDi, Sep 19, 2006 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ein Beispiel für ein physikalisch korrektes 2D-Game. Mit Cursor links/rechts kann man vor oder zurück fahren. Mit Cursor hoch/runter lässt sich das Fahrzeug nach hinten oder vorne kippen.

Beschreibung:

Ein Type erstellt KnotenPunkte (KP) welche Positionen und Geschwindigkeit einzelner KnotenPunkte angibt. Ein weiteres Type erstellt VerKlinkungen (VK) welches Verbindungen zweier KP angibt. Dabei speichert das VK auch die Solllänge einzelner VK ab. Wird die Solllänge im Spielverlauf durch zB äussere Einwirkung beeinflusst, so wird mit Umpositionierungen und Geschwidigkeitsänderungen einzelner KP dem entgegengesetzt. Fertig.

Hier das Typebeispiel. In den ersten Versuchen hatte ich die KP und VK in Dims gespeichert gehabt. Was nun besser ist, sei dahingestellt...

Code: [AUSKLAPPEN]
gfx=1280
gfy=960
ghx=gfx/2
ghy=gfy/2
Graphics3D gfx,gfy,0,1
SetBuffer BackBuffer()

;Kamera erstellen
camera=CreateCamera()
CameraClsColor camera,64,64,96
PositionEntity camera,0,0,-100
CameraRange camera,1,200
CameraProjMode camera,2
CameraZoom camera,.012

;Licht erstellen
light=CreateLight()
RotateEntity light,40,-40,0

;Meshes, a-Auto, l-Level
Global amesh=CreateMesh()
Global lmesh=CreateMesh()
Global brush=CreateBrush()
BrushFX brush,35;2
Global aface=CreateSurface(amesh,brush)
Global lface=CreateSurface(lmesh,brush)

EntityType lmesh,2
Collisions 1,2,2,2

dx#=0
dy#=0
wk#=0

Global xn%=0
Global yn%=0
Global xa%=0
Global ya%=0

Type kp
 Field xg# ;X-Speed
 Field yg# ;Y-Speed
 Field pv% ;Pivot
End Type

Type vk
 Field k1% ;KP-1
 Field k2% ;KP-2
 Field fd% ;Federung
 Field df% ;Dämpfung
 Field ln# ;Solllänge
End Type

;Add-KP
Restore KP
While pv<>-1
 Read dx,dy,pv
 If pv<>-1 new_kp(dx,dy,pv)
Wend

;Add-VK
Restore VK
While df<>-1
 Read v1,v2,fd,df
 If df<>-1 new_vk(v1,v2,fd,df)
Wend

;Add-LV
Restore LV
While yn<>-1
 Read xn,yn
 If yn<>-1 new_lv(xn,yn)
Wend

;Karosserietriangles
AddTriangle aface,0,6,2
AddTriangle aface,5,6,7
AddTriangle aface,5,2,6
AddTriangle aface,3,4,0

;Radtriangles
AddTriangle aface,8,11,10
AddTriangle aface,8,12,11
AddTriangle aface,8,13,12
AddTriangle aface,8,14,13
AddTriangle aface,8,15,14
AddTriangle aface,8,16,15
AddTriangle aface,8,17,16
AddTriangle aface,8,10,17
AddTriangle aface,9,19,18
AddTriangle aface,9,20,19
AddTriangle aface,9,21,20
AddTriangle aface,9,22,21
AddTriangle aface,9,23,22
AddTriangle aface,9,24,23
AddTriangle aface,9,25,24
AddTriangle aface,9,18,25


;====-===-==-=-=--=---=----=---- --- -- - -  -   -    -


;HAUPTSCHLEIFE
While Not KeyHit(1)

 ;Extrahärte
 For w=1 To 8
  ;VerKlinkungen
  For vk.vk=Each vk
   k1.kp=Object.kp(vk\k1)
   k2.kp=Object.kp(vk\k2)
   wk=(ATan2(EntityY(k2\pv)-EntityY(k1\pv),EntityX(k2\pv)-EntityX(k1\pv)))Mod 360
   dx=((EntityX(k1\pv)+Cos(wk)*vk\ln)-EntityX(k2\pv))
   dy=((EntityY(k1\pv)+Sin(wk)*vk\ln)-EntityY(k2\pv))
   MoveEntity k1\pv,-dx/vk\fd,-dy/vk\fd,0
   k1\xg=k1\xg-dx/vk\df
   k1\yg=k1\yg-dy/vk\df
   MoveEntity k2\pv,+dx/vk\fd,+dy/vk\fd,0
   k2\xg=k2\xg+dx/vk\df
   k2\yg=k2\yg+dy/vk\df
  Next
 Next

 ;KnotenPunkte
 vertexcounter=0
 For kp.kp=Each kp
  kp\yg=kp\yg-.005
  MoveEntity kp\pv,kp\xg,kp\yg,-EntityZ(kp\pv)
  If CountCollisions(kp\pv)>0 kp\xg=0:kp\yg=0
  VertexCoords aface,vertexcounter,EntityX(kp\pv),EntityY(kp\pv),0
  vertexcounter=vertexcounter+1
 Next

 ;Vorwärts
 If KeyDown(203)
  For q=0 To 7 Step 2
   k1.kp=Object.kp(12+q)
   k2.kp=Object.kp(11+q)
   k3.kp=Object.kp(20+q)
   k4.kp=Object.kp(19+q)
   k1\xg=k1\xg+(EntityY(k2\pv)-EntityY(k1\pv))/20
   k1\yg=k1\yg-(EntityX(k2\pv)-EntityX(k1\pv))/20
   k3\xg=k3\xg+(EntityY(k4\pv)-EntityY(k3\pv))/20
   k3\yg=k3\yg-(EntityX(k4\pv)-EntityX(k3\pv))/20
  Next
 End If

 ;Rückwärts
 If KeyDown(205)
  For q=0 To 7 Step 2
   k1.kp=Object.kp(12+q)
   k2.kp=Object.kp(11+q)
   k3.kp=Object.kp(20+q)
   k4.kp=Object.kp(19+q)
   k1\xg=k1\xg-(EntityY(k2\pv)-EntityY(k1\pv))/24
   k1\yg=k1\yg+(EntityX(k2\pv)-EntityX(k1\pv))/24
   k3\xg=k3\xg-(EntityY(k4\pv)-EntityY(k3\pv))/24
   k3\yg=k3\yg+(EntityX(k4\pv)-EntityX(k3\pv))/24
  Next
 End If

 ;Kippen Hinten
 If KeyDown(200)
  k1.kp=Object.kp(9)
  k2.kp=Object.kp(10)
  k1\xg=k1\xg-(EntityY(k2\pv)-EntityY(k1\pv))/200
  k1\yg=k1\yg+(EntityX(k2\pv)-EntityX(k1\pv))/200
  k2\xg=k2\xg-(EntityY(k1\pv)-EntityY(k2\pv))/200
  k2\yg=k2\yg+(EntityX(k1\pv)-EntityX(k2\pv))/200
 End If

 ;Kippen Vorn
 If KeyDown(208)
  k1.kp=Object.kp(9)
  k2.kp=Object.kp(10)
  k1\xg=k1\xg+(EntityY(k2\pv)-EntityY(k1\pv))/200
  k1\yg=k1\yg-(EntityX(k2\pv)-EntityX(k1\pv))/200
  k2\xg=k2\xg+(EntityY(k1\pv)-EntityY(k2\pv))/200
  k2\yg=k2\yg-(EntityX(k1\pv)-EntityX(k2\pv))/200
 End If

 k1.kp=Object.kp(2)
 MoveEntity camera,(EntityX(k1\pv)-EntityX(camera))/30,(EntityY(k1\pv)-EntityY(camera))/20,0

 UpdateWorld
 RenderWorld
 Flip
Wend
End


;====-===-==-=-=--=---=----=---- --- -- - -  -   -    -


;KnotenPunkt erstellen
Function new_kp(xp#,yp#,sw%)
 kp.kp=New kp
 If sw=0 kp\pv=CreatePivot()
 If sw=1 kp\pv=CreateSphere(8)
 PositionEntity kp\pv,xp,yp,0
 EntityRadius kp\pv,sw+.1
 EntityType kp\pv,1
 ;Vertexspezial
 f1=120-sw*120
 f2=140-sw*140
 v0=AddVertex(aface,0,0,0)
 VertexColor aface,v0,f1,f1,f2,1
 Return Handle(kp)
End Function

;VerKlinkung erstellen
Function new_vk(k1%,k2%,fd%,df%)
 p1.kp=Object.kp(k1)
 p2.kp=Object.kp(k2)
 vk.vk=New vk
 vk\k1=k1
 vk\k2=k2
 If fd<1 fd=1
 If df<1 df=1
 vk\fd=(fd+1)^2
 vk\df=(df+1)^2
 vk\ln=EntityDistance(p1\pv,p2\pv)
End Function

;LeVeldaten erstellen
Function new_lv(xn,yn)
 xn=-(xn*2)+60
 yn=-(yn*2)+30
 v0=AddVertex(lface,xa,ya,-20)
 v1=AddVertex(lface,xn,yn,-20)
 v2=AddVertex(lface,xn,yn-80,-20)
 v3=AddVertex(lface,xa,ya-80,-20)
 w0=AddVertex(lface,xa,ya,20)
 w1=AddVertex(lface,xn,yn,20)
 VertexColor lface,v0,240,200,120,1
 VertexColor lface,v1,240,200,120,1
 VertexColor lface,v2,120,100,60,0
 VertexColor lface,v3,120,100,60,0
 VertexColor lface,w0,0,0,0,1
 VertexColor lface,w1,0,0,0,1
 AddTriangle lface,v0,v1,w1
 AddTriangle lface,w1,w0,v0
 AddTriangle lface,v1,v0,v3
 AddTriangle lface,v3,v2,v1
 ;v0=AddVertex(lface,xn+1,yn+1,0)
 ;v1=AddVertex(lface,xn,yn-1,0)
 ;v2=AddVertex(lface,xn-1,yn+1,0)
 ;AddTriangle lface,v0,v1,v2
 xa=xn
 ya=yn
End Function

.KP ;Positionierung der KnotenPunkte;X,Y,0/1-(un)sichtbar,
Data -8,-1,0, 0,-1,0, 8,-1,0, -9,5,0, 0,6,0 ;01-05, Karosserie
Data 9,5,0, 0,8,0, 7,8,0, -6,0,0, 6,0,0 ;06-10, Karosserie +Achsen
Data -2.538,0.0,1, -3.552,2.448,1, -6.0,3.462,1, -8.448,2.448,1 ;11-14, Vorderrad
Data -9.462,-0.0,1, -8.448,-2.448,1, -6.0,-3.462,1, -3.552,-2.448,1 ;15-18, Vorderrad
Data 9.462,0.0,1, 8.448,2.448,1, 6.0,3.462,1, 3.552,2.448,1 ;19-22, Hinterrad
Data 2.538,0.0,1, 3.552,-2.448,1, 6.0,-3.462,1, 8.448,-2.448,1 ;23-26, Hinterrad
Data 0,0,-1 ;KP-Ende

.VK ;Verweise der VerKlinkungen;Vom KP,Zum KP,Federung,Dämpfung,
Data 01,02,1,1, 02,03,1,1, 04,05,1,1, 05,06,1,1, 07,08,1,1, 01,04,1,1 ;Karosserie
Data 02,05,1,1, 03,06,1,1, 02,07,1,1, 03,08,1,1, 01,05,1,1, 03,05,1,1 ;Karosserie
Data 01,07,1,1, 03,07,1,1, 02,04,1,1, 02,06,1,1, 04,07,1,1, 06,07,1,1 ;Karosserie
Data 02,08,1,1, 05,07,1,1, 01,06,1,1, 03,04,1,1, 01,08,1,1, 06,08,1,1 ;Karosserie
Data 11,12,1,1, 12,13,1,1, 13,14,1,1, 14,15,1,1 ;Vorderrad Umfang
Data 15,16,1,1, 16,17,1,1, 17,18,1,1, 18,11,1,1 ;Vorderrad Umfang
Data 09,11,1,1, 09,12,1,1, 09,13,1,1, 09,14,1,1 ;Vorderrad Speichen
Data 09,15,1,1, 09,16,1,1, 09,17,1,1, 09,18,1,1 ;Vorderrad Speichen
Data 11,14,1,1, 14,17,1,1, 17,12,1,1, 12,15,1,1 ;Vorderrad Stabilität
Data 15,18,1,1, 18,13,1,1, 13,16,1,1, 16,11,1,1 ;Vorderrad Stabilität
Data 19,20,1,1, 20,21,1,1, 21,22,1,1, 22,23,1,1 ;Hinterrad Umfang
Data 23,24,1,1, 24,25,1,1, 25,26,1,1, 26,19,1,1 ;Hinterrad Umfang
Data 10,19,1,1, 10,20,1,1, 10,21,1,1, 10,22,1,1 ;Hinterrad Speichen
Data 10,23,1,1, 10,24,1,1, 10,25,1,1, 10,26,1,1 ;Hinterrad Speichen
Data 19,22,1,1, 22,25,1,1, 25,20,1,1, 20,23,1,1 ;Hinterrad Stabilität
Data 23,26,1,1, 26,21,1,1, 21,24,1,1, 24,19,1,1 ;Hinterrad Stabilität
;Data 07,09,4,6, 07,10,4,6, 09,04,4,6, 10,06,4,6 ;Stossdämpfer
Data 07,09,6,9, 07,10,6,9, 09,04,6,9, 10,06,6,9 ;Stossdämpfer
Data 03,09,1,1, 01,10,1,1, 0,0,0,-1 ;Radaufhängung, VK-Ende

.LV ;Leveldaten
Data 0000,00,0024,00,0024,24,0068,24,0071,23,0074,24,0077,23,0080,24
Data 0083,23,0086,24,0089,23,0092,25,0095,24,0098,26,0101,25,0104,27
Data 0107,26,0110,27,0113,26,0116,27,0119,26,0122,27,0125,26,0128,27
Data 0149,27,0168,26,0179,25,0187,24,0194,23,0200,22,0205,21,0209,20
Data 0214,21,0219,23,0224,26,0229,30,0251,52,0256,56,0261,59,0266,61
Data 0271,62,0276,62,0281,61,0286,59,0291,56,0296,52,0301,47,0304,45
Data 0307,44,0310,46,0313,47,0342,47,0345,46,0349,48,0352,47,0355,47
Data 0357,46,0359,47,0363,46,0365,47,0368,46,0370,45,0373,46,0375,45
Data 0379,47,0380,46,0383,46,0385,45,0388,46,0391,48,0394,47,0396,45
Data 0399,45,0401,47,0404,49,0407,48,0411,49,0414,47,0432,47,0435,46
Data 0439,42,0442,41,0448,41,0451,40,0455,36,0458,35,0464,35,0467,34
Data 0471,30,0474,29,0480,29,0483,28,0487,24,0490,23,0509,23,0513,22
Data 0517,20,0521,24,0525,29,0529,35,0533,40,0537,44,0541,47,0545,49
Data 0549,50,0553,50,0559,56,0565,61,0571,65,0577,68,0583,70,0589,71
Data 0595,71,0601,70,0607,68,0613,65,0619,61,0625,56,0631,50,0634,49
Data 0657,49,0659,48,0661,44,0663,43,0667,43,0669,42,0671,38,0673,37
Data 0677,37,0679,36,0681,32,0683,31,0687,31,0689,32,0691,36,0693,37
Data 0697,37,0699,38,0701,42,0703,43,0707,43,0709,44,0711,48,0713,49
Data 0730,49,0733,50,0741,58,0744,59,0752,67,0755,68,0763,76,0766,77
Data 0769,77,0772,76,0780,68,0783,67,0791,59,0794,58,0812,58,0814,57
Data 0820,57,0822,56,0834,56,0836,55,0841,55,0843,54,0846,54,0847,53
Data 0849,53,0851,52,0853,52,0855,50,0857,50,0859,48,0862,48,0863,46
Data 0866,46,0868,44,0870,44,0872,42,0874,42,0876,39,0878,39,0879,37
Data 0881,36,0882,34,0886,32,0887,30,0890,29,0891,27,0894,27,0895,25
Data 0897,24,0898,22,0902,21,0903,19,0906,19,0908,17,0911,17,0913,15
Data 0917,15,0919,13,0923,13,0925,12,0929,12,0932,11,0939,11,0943,10
Data 0978,10,0980,12,1000,13,1020,15,1040,18,1060,22,1080,27,1100,33
Data 1120,40,1140,48,1142,50,1145,62,1147,69,1149,75,1151,80,1153,84
Data 1155,87,1157,89,1159,90,1161,90,1163,89,1165,87,1167,84,1169,80
Data 1171,79,1173,79,1175,80,1180,85,1185,89,1190,92,1195,94,1200,95
Data 1205,95,1210,94,1215,92,1220,89,1262,56,1272,49,1282,43,1292,38
Data 1302,34,1312,31,1322,29,1332,28,1342,28,1352,29,1355,35,1358,40
Data 1361,44,1364,47,1367,49,1370,50,1373,50,1376,49,1379,47,1381,47
Data 1384,49,1387,52,1390,56,1396,66,1399,70,1402,73,1405,75,1408,76
Data 1414,76,1420,75,1426,73,1432,70,1438,66,1441,63,1444,59,1447,54
Data 1450,48,1453,43,1456,39,1459,36,1462,34,1465,33,1490,33,1492,32
Data 1495,26,1497,25,1504,25,1505,26,1508,26,1509,25,1510,25,1511,26
Data 1514,26,1515,25,1516,25,1517,26,1520,26,1521,25,1522,25,1523,26
Data 1526,26,1527,25,1530,25,1531,26,1532,26,1533,25,1536,25,1537,26
Data 1538,26,1539,25,1542,25,1543,26,1546,26,1547,25,1548,25,1549,26
Data 1552,26,1553,25,1554,25,1555,26,1558,26,1559,25,1560,25,1561,26
Data 1564,26,1565,25,1572,25,1574,26,1577,32,1579,33,1583,33,1585,32
Data 1587,28,1589,27,1626,27,1629,28,1632,28,1635,27,1638,25,1641,24
Data 1644,24,1647,25,1650,27,1653,30,1656,32,1659,33,1662,33,1665,32
Data 1668,30,1671,27,1674,23,1677,20,1680,18,1683,17,1686,17,1689,18
Data 1692,20,1695,23,1698,27,1701,30,1704,32,1707,33,1710,33,1713,32
Data 1716,30,1719,27,1722,25,1725,24,1728,24,1731,25,1734,27,1737,28
Data 1740,28,1743,27,1756,27,1757,29,1760,29,1761,31,1764,31,1765,33
Data 1768,33,1769,35,1772,35,1773,37,1776,37,1777,39,1780,39,1781,41
Data 1784,41,1785,43,1789,43,1790,45,1795,45,1796,47,1802,47,1803,46
Data 1804,46,1805,47,1811,47,1812,45,1817,45,1818,43,1822,43,1823,41
Data 1826,41,1827,39,1830,39,1831,37,1834,37,1835,35,1838,35,1839,33
Data 1842,33,1843,31,1846,31,1847,29,1850,29,1851,27,1872,27,1872,24
Data 1900,24,1900,00,1924,00,0000,-1

In den nächsten tagen stelle ich mal das ganze noch in 3D vor. Das 3D-Game ist fertig, ich möchte aber dazu noch ein wenig mehr Beschreibung zu liefern.

Blitzcoder

Newsposter

BeitragDi, Sep 19, 2006 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Schick Schick. Wenn das in 3D gut klappt, und dann noch eine anständige Physik für die seiten Kollisionen, dann kannst du trackmania nachproggen Wink

MfG Blitzcoder
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

aMul

Sieger des Minimalist Compo 01/13

BeitragDi, Sep 19, 2006 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ziemlich gut! Sowas muss man erstmal können!
(ich kanns (noch) nicht)
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

PSY

BeitragDi, Sep 19, 2006 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht sehr gut aus!
Macht richtig Spass zu heizen Wink

Keep it up,
psy

Blitzcoder

Newsposter

BeitragDi, Sep 19, 2006 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr müsst den Code etwas anpassen. Ich hab das Auto etwas "getuned".
z.B. einfach mal bei ;Vorwärts statt /20 einfach 4x /3 schreiben. Dann geht er ab.

Nochwas, das Autu fällt zu langsam
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

StepTiger

BeitragDi, Sep 19, 2006 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Gefällt mir auch sehr gut! Ist das nur bei diesem "Polygramm" möglich oder ist jede Form möglich zu benutzen?
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

PSY

BeitragDi, Sep 19, 2006 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
man kann jede Form benutzen, man muss halt die Knotenpunkte anpassen...behaupte ich jetzt mal so Wink
 

BIG BUG

BeitragDi, Sep 19, 2006 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön. Richtige Grafiken, paar Level und eine Zeitmessung und fertig ist ein tolles Spiel Smile

Ein recht berühmter Vertreter dieser Art Spiel wäre hier:
http://www.elastomania.com/
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Sep 20, 2006 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry wegen verspäteter Antwort, hab zZ kein Internet zuhause, so muß ich mich des der Arbeit begnügen.

@BlitzCoder, die Kollision funktioniert bei 3D wunderbar. Ein manko gibt es lediglich, daß nur Knotenpunkte eine Kollision hervorrufen können. Das bedeutet, daß eine Fahrerkabine mit wenigen Knotenpunkten auch nur diese zur Kollision hat. Die Physik in 3D beläuft sich zB auf folgende:
- Massenträgheit (Energieerhaltungssatz)
- Fliehkraft
- Kreiselstabilität etc...

@aMul, @PSY, danke! Freud mich sowas zu hören. Smile

@StepTiger, es sind alle zu erträumenden Formen möglich. Mit Leichtigkeit liesse sich an diesem Fahrzeug zB auch ein Anhänger ranbabsen, der sich auch physikalisch korrekt verhält. Oder auch andere Fahrzeuge mit mehrrädrigem Antrieb. Fahrzeuge mit mehreren Kabinen (Raupenähnlich), wo jede kabine ihre Federung und Maximalkippbelastung beibehält...

Hubsi

BeitragMi, Sep 20, 2006 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist schön anzusehen, meinen vollen Respekt. Bin jetzt eine halbe Stunde rumgefahren und habe keine Möglichkeit ausgelassen die Federung bis unters Dach zu drücken Very Happy Macht regelrecht Spaß das arme Ding zu quälen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Sep 20, 2006 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Hubsi, die Federung lässt sich auf modifizieren. Smile

In den zweiten Datazeilenblock gibt es eine Zeile die so aussieht:

Code: [AUSKLAPPEN]
Data 07,09,6,9, 07,10,6,9, 09,04,6,9, 10,06,6,9 ;Stossdämpfer


die xx,xx,6,9 geben ab wie sich jeweils die Stossdämpfer verhalten sollen.
Die dritte Zahl 6 gibt die Federstärke an
Die vierte Zahl 9 gibt den Dämpfungsgrad an

Viel Spaß

TheMatrix

BeitragDo, Sep 21, 2006 10:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Geiles Teil. Top Spitze.

Bringt richtig Bock das Teil bis zum Durchdrehen zu zwingen. Mach ein paar Levels, Upgrades, Gegner. Und fertig is das Game. Ich wär der erste ders mir sofort loaden würde Wink

Weiter so!
°_° °.° °~° °v° .. -.-

StepTiger

BeitragSo, Okt 08, 2006 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich war von dem Spiel jetzt so fasziniert, dass ich einen Leveleditor dafür geschrieben habe.

Also macht mal fleißig Level! ^^

Code: [AUSKLAPPEN]
Graphics 1024,768,0,2
SetBuffer BackBuffer()

Type knot
   
   Field x,y
   
End Type

xplus=0
yplus=0

ox=0
oy=0

speed#=1

While Not KeyDown(1)
   
   Cls
   
   xplus=xplus+(KeyDown(205)-KeyDown(203))*speed#
   yplus=yplus+(KeyDown(208)-KeyDown(200))*speed#
   
   speed#=speed#+(KeyDown(205) Or KeyDown(203) Or KeyDown(200) Or KeyDown(208))*.1
   If ((KeyDown(205) Xor KeyDown(203)) Or (KeyDown(200) Xor KeyDown(208)))=0 Then speed#=1
   
   a.knot=First knot
   While a.knot<>Null
      ox=a\x
      oy=a\y
      a.knot=After a
      If a<>Null
         x1=GraphicsWidth()-ox*(GraphicsWidth()/100)-xplus
         y1=oy*GraphicsHeight()/50-yplus
         x2=GraphicsWidth()-a\x*(GraphicsWidth()/100)-xplus
         y2=a\y*GraphicsHeight()/50-yplus
         Line x1,y1,x2,y2
         Line x1,y1,x1,GraphicsWidth()
      EndIf
   Wend
   
   If MouseHit(1)
      r.knot=New knot
      r\x=(GraphicsWidth()-MouseX()-xplus)/(GraphicsWidth()/100)
      r\y=(MouseY()+yplus)*50/GraphicsHeight()
   EndIf
   
   If MouseHit(2)
      r.knot=Last knot
      Delete r
   EndIf
   
   If KeyHit(57) Then LoadLevel("datas.txt")
   
   If KeyHit(211)
      
      For a.knot=Each knot
         
         Delete a
         
      Next
      
   EndIf
   
   If KeyHit(28)
      SaveThem("datas.txt")
   EndIf
   
   Flip
   
Wend

End

Function LoadLevel(path$)
   
   For r.knot=Each knot
      
      Delete r
      
   Next
   
   file=OpenFile(path$)
   
   While Not Eof(file)
      
      d$=ReadLine(file)
      
      d$=Right(d$,Len(d$)-Instr(d$," "))
      
      While Instr(d$,",")
         
         x=Left(d$,Instr(d$,",")-1)
         d$=Right$(d$,Len(d$)-Instr(d$,","))
         If Instr(d$,",")
            y=Left(d$,Instr(d$,","))
         Else
            y=d$
         EndIf
         
         d$=Right$(d$,Len(d$)-Instr(d$,","))
         
         If x<>-1 And y<>-1
            
            r.knot=New knot
            r\x=x
            r\y=y
            
         EndIf
         
      Wend
   
   Wend
   
   CloseFile file
   
End Function
   
Function SaveThem(file$)
   
   num=0
   tHandle=WriteFile(file$)
   
   tstr$="Data "
   
   For sa.knot=Each knot
      
      If num>0 Then tstr$=tstr$+","
      xs$=format$(sa\x)
      ys$=Str$(sa\y)
      tstr$=tstr$+xs$+","+ys$
      num=num+1
      If num>7
         WriteLine tHandle,tstr$
         tstr$="Data "
         num=0
      EndIf
      
   Next
   
   If num>0
      tstr$=tstr$+",-1,-1"
   Else
      tstr$=tstr$+"-1,-1"
   EndIf
   
   WriteLine tHandle,tstr$
   
   CloseFile tHandle
   
End Function

Function Format$(zahl,nums=4,fill$="0")

   lens=Len(Str$(zahl))
   
   newstr$=""
   
   If nums>lens
      
      For x=1 To nums-lens
         
         newstr$=newstr$+fill$
         
      Next
      
      newstr$=newstr$+Str$(zahl)
      
   Else
      
      newstr$=Str$(zahl)
      
   EndIf
   
   Return newstr$
   
End Function


ich denke mal,hectic hat seins auch mit leveleditor gemacht, oder?
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
  • Zuletzt bearbeitet von StepTiger am Sa, Okt 14, 2006 17:10, insgesamt einmal bearbeitet

Christoph

BeitragSo, Okt 08, 2006 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Manche machen so was ins Showcase. Für dich ist es nur Codearchiv. Laughing


Tolle Leistung Smile

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Okt 13, 2006 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
@StepTiger, schön das es dir gefällt. Dein Editor ist übrigens auch gut. Natürlich habe ich auch einen zur Levelerstellung programmiert (was in der ersten Programmausführung vom Buggyspiel nicht der Fall war). Hätte ich mal gleich veröffentlichen können. Embarassed

@All, damit keine Langeweile aufkommt, habe ich mal zwei kleine Levels erstellt. Es empfiehlt sich die Stoßdämpfer zu optimieren:

ursprünglich:
Code: [AUSKLAPPEN]
Data 07,09,6,9, 07,10,6,9, 09,04,6,9, 10,06,6,9 ;Stossdämpfer

umändern zu:
Code: [AUSKLAPPEN]
Data 07,09,4,9, 07,10,4,9, 09,04,4,9, 10,06,4,9 ;Stossdämpfer

Naiv erstellter Level:
Code: [AUSKLAPPEN]
.LV ;Leveldaten
Data 0000,00,0012,00,0012,24,0040,24,0050,23,0059,20,0066,15,0073,11
Data 0081,09,0090,09,0091,13,0093,17,0096,21,0101,24,0108,26,0117,27
Data 0128,27,0135,32,0141,38,0147,45,0151,52,0157,68,0160,75,0164,81
Data 0169,85,0174,88,0180,91,0188,93,0197,95,0208,96,0219,96,0228,95
Data 0234,92,0238,88,0241,83,0245,74,0250,62,0255,51,0260,42,0267,41
Data 0272,33,0278,24,0286,23,0292,17,0299,12,0307,09,0317,07,0327,06
Data 0337,06,0348,07,0352,11,0368,12,0371,18,0387,20,0389,24,0399,26
Data 0401,30,0416,33,0418,39,0437,43,0438,48,0446,50,0447,55,0455,58
Data 0457,64,0467,67,0469,72,0482,78,0484,83,0496,88,0507,91,0518,92
Data 0529,91,0539,87,0546,81,0552,74,0553,69,0558,62,0566,53,0571,52
Data 0575,46,0579,38,0583,29,0585,26,0588,24,0592,23,0596,23,0600,24
Data 0604,26,0609,30,0616,37,0626,48,0632,54,0636,57,0641,58,0647,58
Data 0660,55,0673,51,0685,46,0691,42,0696,37,0699,32,0702,25,0705,18
Data 0708,13,0711,09,0715,06,0720,04,0725,03,0730,03,0736,04,0742,06
Data 0750,10,0763,18,0777,28,0791,39,0801,46,0809,51,0815,54,0823,57
Data 0836,60,0858,64,0880,67,0883,66,0886,64,0889,61,0893,59,0898,59
Data 0902,60,0906,62,0910,64,0915,65,0920,64,0923,61,0925,57,0927,52
Data 0929,48,0932,44,0936,41,0941,39,0947,38,0949,42,0951,46,0954,51
Data 0957,54,0962,56,0967,56,0972,55,0976,53,0981,56,0986,60,0990,65
Data 0994,71,0998,76,1003,80,1008,83,1014,86,1022,89,1030,91,1033,90
Data 1035,88,1038,86,1042,85,1046,86,1049,88,1052,90,1055,92,1060,93
Data 1069,93,1082,92,1090,90,1098,86,1105,81,1110,75,1114,69,1117,67
Data 1121,66,1124,64,1127,61,1129,57,1131,52,1134,46,1138,41,1143,37
Data 1149,33,1151,34,1154,34,1157,32,1158,29,1159,27,1165,23,1173,19
Data 1181,16,1183,17,1186,17,1188,16,1189,14,1197,12,1205,11,1207,12
Data 1209,13,1212,13,1214,11,1216,10,1225,10,1235,11,1245,13,1255,16
Data 1265,20,1266,22,1268,24,1271,26,1274,27,1277,27,1284,32,1291,38
Data 1294,41,1297,43,1301,44,1304,44,1307,43,1309,41,1311,39,1314,38
Data 1317,39,1319,41,1321,43,1324,44,1327,43,1329,41,1332,39,1336,38
Data 1340,38,1342,37,1344,34,1345,31,1347,28,1349,26,1352,25,1356,25
Data 1360,26,1363,28,1366,31,1368,34,1370,37,1373,40,1377,43,1381,45
Data 1385,45,1390,44,1395,41,1399,38,1403,34,1405,31,1406,28,1407,25
Data 1409,22,1413,20,1418,19,1424,19,1430,20,1436,22,1442,25,1447,28
Data 1451,30,1456,31,1460,31,1464,30,1468,30,1472,32,1474,35,1475,39
Data 1477,43,1480,47,1484,50,1488,52,1493,53,1497,53,1501,52,1504,50
Data 1507,47,1509,44,1511,40,1513,35,1516,29,1520,23,1525,17,1531,11
Data 1533,10,1536,09,1540,09,1544,10,1549,12,1555,14,1562,16,1569,17
Data 1577,17,1584,16,1588,14,1590,12,1592,09,1594,07,1597,05,1601,04
Data 1606,04,1609,05,1611,07,1613,09,1616,11,1619,12,1622,12,1625,11
Data 1627,09,1629,07,1632,06,1635,06,1638,07,1641,09,1644,12,1647,16
Data 1650,21,1653,27,1656,34,1659,42,1662,49,1665,54,1668,58,1672,62
Data 1677,65,1683,68,1693,72,1705,76,1720,80,1725,81,1729,81,1732,80
Data 1735,78,1738,75,1741,71,1743,70,1745,70,1748,71,1752,73,1757,76
Data 1765,82,1771,86,1778,89,1785,91,1793,92,1801,92,1810,91,1819,89
Data 1823,87,1826,84,1828,81,1830,77,1832,72,1833,71,1835,70,1838,68
Data 1840,65,1843,59,1846,52,1847,50,1849,48,1851,47,1854,46,1857,45
Data 1860,43,1863,40,1866,36,1869,31,1871,28,1873,26,1876,24,1880,22
Data 1884,21,1888,21,1892,22,1896,24,1900,27,1904,31,1906,33,1908,34
Data 1910,34,1912,33,1915,30,1918,26,1921,21,1925,16,1927,14,1930,13
Data 1933,13,1936,14,1940,16,1945,19,1946,24,1952,28,1959,33,1960,38
Data 1966,43,1972,49,1973,56,1977,61,1982,66,1988,70,1994,73,2000,75
Data 2004,76,2008,76,2011,75,2013,73,2015,70,2017,66,2021,56,2023,51
Data 2025,47,2028,42,2032,37,2036,33,2041,29,2048,24,2055,20,2057,20
Data 2059,21,2060,23,2061,26,2063,29,2066,31,2071,33,2079,35,2088,36
Data 2089,38,2092,38,2093,36,2104,36,2107,35,2110,33,2112,31,2114,30
Data 2116,30,2118,31,2120,33,2123,35,2128,36,2135,36,2142,35,2148,33
Data 2153,30,2157,27,2160,25,2163,24,2192,24,2192,00,2206,00,0000,-1

Kleiner Spaßlevel:
Code: [AUSKLAPPEN]
.LV ;Leveldaten
Data 0000,00,0012,00,0012,24,0040,24,0045,25,0050,27,0055,30,0060,34
Data 0065,39,0070,45,0080,58,0085,64,0090,69,0095,73,0100,76,0105,78
Data 0110,79,0115,79,0120,78,0125,76,0130,73,0135,69,0140,64,0143,62
Data 0146,61,0158,61,0160,60,0162,58,0164,57,0171,57,0173,56,0175,54
Data 0177,53,0184,53,0186,52,0188,50,0190,49,0197,49,0199,50,0201,52
Data 0203,53,0217,53,0218,54,0222,54,0223,53,0227,53,0228,54,0232,54
Data 0233,53,0237,53,0238,54,0242,54,0243,53,0247,53,0248,54,0252,54
Data 0253,53,0257,53,0258,54,0262,54,0263,53,0281,53,0283,52,0285,48
Data 0287,47,0289,47,0291,46,0293,42,0295,41,0297,41,0299,40,0301,36
Data 0303,35,0305,35,0307,34,0309,30,0311,29,0313,29,0315,28,0317,24
Data 0319,23,0338,23,0340,24,0342,28,0344,29,0346,29,0348,30,0350,34
Data 0352,35,0354,35,0356,36,0358,40,0360,41,0365,41,0367,40,0369,36
Data 0371,35,0376,35,0378,36,0380,40,0382,41,0384,41,0386,42,0388,46
Data 0390,47,0392,47,0394,48,0396,52,0398,53,0420,53,0423,52,0426,50
Data 0429,47,0432,43,0435,38,0441,26,0444,21,0447,17,0450,14,0453,12
Data 0456,11,0458,13,0460,14,0475,14,0479,15,0483,17,0487,20,0491,24
Data 0495,29,0503,41,0507,46,0511,50,0515,53,0519,55,0523,56,0527,56
Data 0529,59,0531,61,0533,62,0546,62,0551,63,0556,65,0561,68,0566,72
Data 0571,77,0576,81,0581,84,0586,86,0591,87,0596,87,0601,86,0606,84
Data 0611,81,0616,77,0621,72,0626,66,0631,59,0636,51,0641,42,0651,22
Data 0655,15,0659,09,0663,04,0667,00,0676,00,0679,03,0682,00,0684,00
Data 0687,03,0690,00,0692,00,0695,03,0698,00,0700,00,0709,00,0714,05
Data 0719,09,0724,12,0729,14,0734,15,0751,15,0752,18,0765,18,0766,21
Data 0772,21,0773,24,0797,24,0798,27,0802,27,0803,30,0817,30,0818,33
Data 0833,33,0834,36,0842,36,0843,39,0853,39,0854,42,0872,42,0873,45
Data 0878,45,0879,48,0890,48,0891,51,0899,51,0900,54,0907,54,0908,57
Data 0911,57,0912,60,0921,60,0922,63,0929,63,0930,66,0948,66,0949,69
Data 0982,69,0988,68,0994,66,1000,63,1006,59,1012,54,1024,42,1030,37
Data 1036,33,1042,30,1048,28,1054,27,1070,27,1072,26,1073,24,1075,23
Data 1083,23,1085,24,1086,26,1088,27,1099,27,1101,28,1102,30,1104,31
Data 1116,31,1118,30,1120,25,1122,24,1150,24,1150,00,1164,00,0000,-1

StepTiger

BeitragSa, Okt 14, 2006 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
hab meinen code mal ein bissl verändert.

siehe oben

ab nun:
Enter - Speichern
Space - Laden
Linke Maustaste - Knotenpunkt setzen
Rechte Maustaste - Letzten Knotenpunkt löschen
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

biggicekey

Betreff: Re: [B3D] Physik 4WD Buggy in 2D

BeitragDo, Nov 09, 2006 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:

In den nächsten tagen stelle ich mal das ganze noch in 3D vor. Das 3D-Game ist fertig, ich möchte aber dazu noch ein wenig mehr Beschreibung zu liefern.



wann sind denn die nächsten tage?
oder hab ichs schon verpasst?

find das auf jeden fall hammerlustig bringt fun da rumzuheizen
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]

Te(Y)House

BeitragDo, Nov 09, 2006 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
wow!
Mach doch nen Game draus mit richtigen Grafiken!?
Ich meine das wird locker Game des Monats! Wie kommt man bloss auf so
geile Ideen? ^^

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Nov 09, 2006 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@biggicekey, ne verpasst hast du noch nichts. Die 3D-Version davon funktioniert ja bereits seit geraumer Zeit. Nur möchte ich es noch in Types umschreiben, bisher alles auf Dims verlegt und ganz schön blöd somit. Nur komme ich nich wirklich dazu, da ich jeden Tag beim rumheizen der 2D-Version bin. Very Happy Als 3D-Versionen habe ich zZ ein Würfel ein 4WD Buggybeispiel und ein (2WD) Motocycle! Beim letzterem ist besonders die Kreiselstabilität sehr interessant, wo man ständig das Motorrad ausbalancieren muß. Und, je langsamer man fährt man mehr balancieren muß da die Kreiselstabilität nicht mehr so gut greift.


@Te(Y)House, ja wie kommt man darauf??? Wenn man ein Freund der Physik ist, hat man Spaß daran, sich mit sowas zu beschäftigen. Very Happy Die Idee Objekte so zu programmieren ist mir eingefallen als ich versucht habe das gute alte BridgeBuilder (Vorgänger von Pontifex) zuminest in gleicher Qualität nachzuprogrammieren. Als ich es dann geschafft hatte, habe ich immer weiter gebastelt und probiert. Zuerst kam das Rad!!! Dann Hubstangen (zB wie Hydraulik-Druckzylinder) und zu letzt auch Dämpfer. Erst nach dem Dämpfer habe ich gefederte Räder machen können, ohne das das Fahrzeug wie ein Flummi über die Landschafft hüpft. Jetzt habe ich so viele Ideen darüber was man alles damit machen kann, dass mein Leben nicht ausreichen würde es alleine zu programmieren.

Naja, aber auch das Buggy-Beispiel hat einen endscheidenden Nachteil der reelen Physik. Jeder Knotenpunkt hat eine Gewichtseinheit. Das bedeutet: Da die Reifen aus jeweils 9 Knotenpunkten (8 Umfang, 1 Achse) bestehen und das Chassis aus 8 Knotenpunkten, sind die Reifen mehr als doppelt so schwer die des restlichen Fahrzeugs. Das macht sich beim spielen u.a. auf folgende negative Eigenschaften bemerkbar:

1) Die Räder werden bei Bodenkontakt kaum eingedrückt, da das Fahrzeug ja kaum was wiegt! Jedoch stark in Schwankung gebracht wenn, das Fahrzeug Bodenkontakt hat und die Räder nur ihr Eigengewicht ausgleichen müssen.

2) Da der Schwerpunkt auf den Rädern liegt, kippt das Fahrzeug bei Steilfahrten erst viel zu spät nach hinten. Es kann eine Steigung von etwa 300% befahren!

3) Andere nicht so wichtige Nachteile, die aber nicht auf die Knotenpunktverteilung zurück zu führen sind.

Ein erster Versuch das Knotenpunktproblem in den Griff zu bekommen, ist gescheitert. Es handelte sich aber um eine Umsetzung in 3D wo dann per Matritzen berechnet werden müsste. Das kann ich leider nicht. Sad In 2D müsste ich es aber hinbekommen, da hier einfache Winkelberechnungen gemacht werden könnten.

Ich bin übrigens bereits an einem solchem Spiel dran. Mit schöner Grafik etc. Problem hier ist aber, dass ich endlich mal ein richtigen Vektoreditor programmieren möchte, und nicht immer nur mal kurz auf ein bestimmtes Spiel zugeschnitten. So werde ich erst an dem Editor schreiben und dann wenn dieser fertig ist, mich an das Spiel weiter machen. Viel zum Spiel gehört ja nicht, wie man sieht. Very Happy

Pdd

BeitragDo, Nov 09, 2006 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss auch sagen: Ich bin begeistert! Das ding is Saugeil!! Macht richtig Spass damit rumzuheizen! Ich bin schon auf weiteres damit gespannt!
Lieber Apfel als Birne.

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group