[B3D] Physik 4WD Buggy in 2D
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
![]() |
PlasmaBetreff: jo |
![]() Antworten mit Zitat ![]() |
---|---|---|
gute idee !! | ||
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist ja wahnsinn! Mein Kompliment! Ich bin schon ganz gespannt auf die 3D Version. | ||
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte: Dexterity Ball (100%) Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz (ehemals Uboot) PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also erstmal: Ich find das Ding einfach klasse.
Nur leider hab ich den Code noch nicht richtig verstanden. Könntest du mir weiterführende Quellen geben damit ich mich in die Thematik einlesen kann? |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was meinst du mit 'weiterführende Quellen'? Es gibt keine, aus welchen ich mich eingearbeitet hätte. Ich habe ähnliches an fertigen Programmen gesehen und mich dann selber Gedanken darüber gemacht und es dann selber ausgearbeitet. Ich kann aber denoch versuchen es mal zu erklären:
Das ganze Prinzip beruht auf Zusammenstellungen der KPs und VKs. KPs sind Knotenpunkte, also Verbindungspunkte die eine Position (EntityX/Y) und jeweils eine Geschwindigkeit (kp\xg, kp\yg) mitsich bringen. Damit hat jeder Punkt auch schon eine gewisse Massenträgheit durch die Eigengeschwindigkeit. Jeder KP speichert also nichts mehr, als die angegebenen Eigenschaften. VKs sind VerKlinkungen, also Verbindungen zweier KPs die die Distanz zweier KPs (vk\ln), Zielinformation zu welchen KPs (vk\k1, vk\k2) und deren Dämpfung und Federung angeben. Dämpfung und Federung kann auch festgelegt werden und muß daher nicht mit in das Type, wenn alle Verbindungen gleich fest sein sollen. Wenn man jetzt die KPs positioniert und mit VKs verbindet, wird durch eine Funktion auch die Solllänge jeglicher VKs ins vk\ln gespeichert. Dadurch haben wir eine art feste Strucktur geschaffen. In der Animationsphase (Spielmodus) wird eine Routine gestartet, die alle VKs durch geht und deren Zielpositionen (KPs) der Istentfernung durch die Sollentfernung korrigiert. Wichtig hier ist, mit Veränderung der Korrektur lassen sich unterschiedliche Eigenschaften der Strucktur festlegen (zB: schwabelig, hart, federnd bzw. hüpfend oder dumpf dämpfend). Ausschlaggebend sind hier die Korrekturen der jeweiligen Position der KPs im Verhältnis zur Korrektur der Geschwindigkeit. Um normale Korrekturen durchführen zu können, wie man es durch 'normale' Materie annehmen würde, so sollte sowohl Position als auch Geschwindigkeit einer Korrektur im Verhältnis 50:50 liegen. Wichtig auch: Jegliche Korrektur sollte durch 4 geteilt werden, da es vier Positionen zu korregieren gibt: Position KP1 und KP2 und Geschwindigkeit KP1 und KP2. Wird die Zahl 4 vergrößert, so wird die Berechnung zwar 'realer' aber auch wesentlich weicher (nicht erwünscht). Wird die Zahl 4 kleiner so wird die Animationsstrucktur härter, aber auch instabil, da eine Übersteuerung vorgenommen wird sie unrealischisch ist. Unter Umständen wird die Strucktur in Eigenschwingung versetzt und zerrissen. Anschliessend muß noch die Positionsänderung und die Eigengeschwindigkeit jeglicher KPs angewand werden. Dadurch erreichen wird erst die Massenträgheit. Dies geschieht in einer Routine. Im Grunde wird jetzt die Animationsfunktion immer bestrebt sein, die Strucktur zusammen zu halten und zu animieren. In der realen Welt funktioniert das Zusammenhalten der auch nicht viel anders. Dadurch werden unterschiedliche Physikalische Eigenschaften automatisch 'übernommen'. Als Beispiel in der 3D-Ausführung: - Massenträgheit unterscheidet sich durch die Masse also Anzahl der KPs. - Drehmonent wird eingehalten und unterscheidet sich durch die Anzahl also auch Positions(Masse)verteilung der KPs. - Fliehkraft wird automatisch durch die Eigenmasse der KPs eingehalten. - Kreiselstabilität wird auch eingehalten. Im Grunde alles was das Programmiererherz wünscht. Nachteile zu dieser Art der Programmierung habe ich zuvor schon oft angesprochen. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke, die Frage kann ich mir auch selbst beantworten ( ![]() Ich hoffe mal, dass das geht ![]() |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
rein theorethisch ja aber:
a) Das wird langsamer b) Du musst dir eine eigene Kollisionsabfrage basteln |
||
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht natürlich auch mit BB. Der Vorteil den B3D bietet ist, daß durch EntityX/Y auf Positionsvariablen verzichtet werden kann. Aber auch durch EntityDistance eine Atan2-Berechnugn ausfällt etc...
Hier ein BB-Beispiel: Code: [AUSKLAPPEN] gfx=1280
gfy=gfx*.75 ghx=gfx/2 ghy=gfy/2 Graphics gfx,gfy,0,1 SetBuffer BackBuffer() Type kp ;KnotenPunkte Field xs% ;X-FestPosition Field ys% ;Y-FestPosition Field xp# ;X-Position Field yp# ;Y-Position Field xg# ;X-Speed Field yg# ;Y-Speed Field at% ;mobil/fest End Type Type vk ;VerKlinkungen Field k1% ;von KP-1 Field k2% ;zum KP-2 Field ln# ;Solllänge End Type sw%=0 ;Switch id%=0 ;Handle wk#=0 ;Winkel dx#=0 ; dy#=0 ; mp%=1 ;MovingPosition ;Edit Hauptschleife While Not KeyHit(1) mx=MouseX() my=MouseY() nx=Int(mx/10.0)*10 ny=Int(my/10.0)*10 If MouseHit(1) id=0 For kp.kp=Each kp If kp\xp=nx And kp\yp=ny id=Handle(kp) Next If id=0 kp.kp=New kp kp\xs=nx kp\ys=ny kp\xp=nx kp\yp=ny kp\xg=0 kp\yg=0 kp\at=0 id=Handle(kp) End If If sw=0 vk.vk=New vk vk\k1=id vk\k2=id sw=1 Else vk.vk=Last vk vk\k2=id k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) vk\ln=Sqr((k1\xp-k2\xp)^2+(k1\yp-k2\yp)^2) sw=0 End If End If If MouseHit(2) id=0 For kp.kp=Each kp If kp\xp=nx And kp\yp=ny id=Handle(kp) Next If id<>0 k1.kp=Object.kp(id) k1\at=1-k1\at End If End If Color 32,32,48:Rect 0,gfy-40,gfx,60,1 Color 48,48,72:For q=0 To gfx Step 10:Rect q,0,1,gfy,1:Rect 0,q,gfx,1,1:Next Color 64,64,96:For q=0 To gfx Step 40:Rect q,0,1,gfy,1:Rect 0,q,gfx,1,1:Next Color 96,96,144:Rect ghx,0,1,960,1 Color 240,240,240:For kp.kp=Each kp:Rect kp\xp-4,kp\yp-4,9,9,kp\at:Next Rect mx-2,my-2,5,5,1 Rect nx-4,ny-4,9,9,0 For vk.vk=Each vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) Line k1\xp,k1\yp,k2\xp,k2\yp If k1=k2 Line k1\xp,k1\yp,nx,ny Next Flip Cls Wend ;Anim Hauptschleife While Not KeyHit(1) Color 48,48,72 Rect 0,gfy-40,gfx,40,1 For w=1 To 8 For vk.vk=Each vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) wk=(ATan2(k2\yp-k1\yp,k2\xp-k1\xp))Mod 360 dx=(k1\xp+Cos(wk)*vk\ln)-k2\xp dy=(k1\yp+Sin(wk)*vk\ln)-k2\yp dx=dx/3 dy=dy/3 k1\xp=k1\xp-dx k1\yp=k1\yp-dy k1\xg=k1\xg-dx k1\yg=k1\yg-dy k2\xp=k2\xp+dx k2\yp=k2\yp+dy k2\xg=k2\xg+dx k2\yg=k2\yg+dy Next Next Color 240,240,240 For kp.kp=Each kp If kp\at=1 kp\xp=kp\xs kp\yp=kp\ys kp\xg=0 kp\yg=0 End If kp\yg=kp\yg+.05 kp\xp=kp\xp+kp\xg kp\yp=kp\yp+kp\yg If kp\yp>gfy-43 kp\yp=gfy-43:kp\yg=0:kp\xg=0 Rect kp\xp-2,kp\yp-2,5,5,0 Next Color 64,64,96 For vk.vk=Each vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) Line k1\xp,k1\yp,k2\xp,k2\yp Next kp.kp=Last kp k1.kp=Object.kp(mp) If KeyHit(29) mp=mp-1:If mp<1 mp=Handle(kp) If KeyHit(56) mp=mp+1:If mp>Handle(kp) mp=1 If KeyDown(203) k1\xg=k1\xg-.05*Handle(kp) If KeyDown(205) k1\xg=k1\xg+.05*Handle(kp) If KeyDown(200) k1\yg=k1\yg-.05*Handle(kp) If KeyDown(208) k1\yg=k1\yg+.05*Handle(kp) Color 240,240,240:Rect k1\xp-2,k1\yp-2,5,5,1 If KeyDown(30) vk.vk=First vk:vk\ln=vk\ln+.5 If KeyDown(44) vk.vk=First vk:vk\ln=vk\ln-.5:If vk\ln<10 vk\ln=10 Flip Cls Wend End EDIT-MODUS: - Mit der Linken Maustaste wird ein neuer KP gesetzt. Mit dem zweiten KP wird eine VK zwischen beiden KPs gelegt. Ist ein KP bereits vorhanden, so wird dieser übernommen. - Mit der Rechten Maustaste kann ein KP festgesetzt bzw. wieder gelöst werden. Dadurch kann ein Rädchen oder ein Gelenk erstellt werden wo andere Struckturen dran hängen - Mit dem ersten ESC gelangt man aus dem Edit-Modus zum Anim-Modus. Hier kann dann die Strucktur angesehen und getestet werden. ANIM-MODUS: - Mit [Strg] oder [Alt] kann zwischen den KPs ausgewählt werden. - Mit Cursor kann das ausgewählte KP mit der Kraft der Gesammt vorhandenen Masse der KPs in die jeweilige Richtung beschleunigt werden. - Mit dem zweiten ESC verlässt man das Programm. edit1: Zitat: a) Das wird langsamer
b) Du musst dir eine eigene Kollisionsabfrage basteln Stimmt! Es wird langsamer aber vor allem lässt sich eine so schöne Landschaft nicht so einfach generieren. Ausser, mann beschäftigt sich sehr eingehend mit Vektoren etc. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke!
Das dürfte alles sein, was man so zum Probieren braucht ![]() |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
einfach nur genial. Ich hab mir selber schon eine Funktion gebastelt, die Meshs einliest und dann so ein "Schwabbelmesh"( ![]() ![]() |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
zeig mal her!!! | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
finds genial ![]() Hab einmal eine Eiffelturm-ähneliches Gebilde erschaffen, sehr stabil übrigens^^ hatte nur 1nen knick reinbekommen, der hat sich aber gleich wieder selbst ausgebeult... ![]() und ein Auto mit Rädern, die sich sogar drehen können^^, hab ich gemacht ![]() (nur die Radaufhängung war ein wenig schwach ![]() hier mal alles zusammengefasst: |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu beachten gild: Jede VK ist gleich stabil, egal wie lang sie ist. Bedeutet leider aber auch, dass eine Aneinanderkettung von VKs zu sehr labilen Strukt führt. Anderenfalls, wenn man den erwähnten Eifelturm in betracht zieht, sollten Verstrebungen nicht allzu parallel verlaufen. Also wie man sieht, ein kleines Paradox.
Hier ein paar meiner Beispiele: Der Kran lässt sich mit [A/Y] hoch runter fahren. 1. Die 'Schlange' neigt selbst dazu, sich wieder grade zu machen. 2. Das Fahrzeug hat Hinterradantrieb und muß eine Last ziehen. 3. Das Fahrzeug lässt sich zusätzlich noch in der Höhe variieren. PS. Die erste VK lässt sich mit [A] und [Y] in der Animationsphase in der Länge verändern. Dadurch kann man Kräne etc erstellen. |
||
- Zuletzt bearbeitet von hectic am Fr, Aug 28, 2009 18:47, insgesamt einmal bearbeitet
Stevenehemals "Steven04" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ist ja funny ![]() Ich habe aber nochmal eine Frage zu dem ursprünglichen Code: Wenn ich eine Box als "Verkleidung" um das Auto tuen möchte, gibt es das Problem, dass nach meiner Ansicht nach es kein Entity gibt, wo man die Drehwinkelwerte mit z.B EntityYaw ablesen, könnte. Nun stellt sich die Frage, soll ik dann selbst so Fühler mitlaufen lassen, oder gibt es da noch eine andere Möglichkeit? |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jedes sichtbare Pivot hat ein EntityRadius und eine Position. Drehwinkel einzelner Pivots bleiben beim drehen der Struktur unverändert. Will man den Winkel haben, so muß dieses mit zweiter Pivotpositionen und Atan2 geschehen. Falls du als 'Box' ein Image meinst, wie es in meinem Contestgame angewandt wurde, so gebe ich mal Auskunft über, wie ich es da gemacht habe:
- Pivots können EntityRadius haben oder sind nur als Verbindungspunkte ohne Kollision gedacht. - Zur Ausrichtung des Images wird ein Zwei-Triangle-Mesh mit dem Image an Position gebracht und gedreht. - Für besseres Gewichtsverhältnis als auch anderer besserer Eigenschaften wird nur ein KP pro Reifen benutzt. Dazu muß aber der Drehmoment etc. spezifisch berechnet werden. |
||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hectic du bist genial als das ist voll toll damit rumzuspielen köntest du noch ein Speicherfunktion hinzufügen ich bekomm das nicht hin
Dank im Voraus [Edit] Also ich habe das jetzt soweit hinbekommen doch ich komme mit disen Handeln nicht klar also ich will das ich k1.kp und k2.kp sichern kann aber wenn ich schreibe WriteLine Datei,Object.kp(vk\k1) Dann geht das nicth ich bitte um Hilfe Also es kann ja nicht sein das ich das nicht inbekomme PS: Das Progg ist super also Danke für Hilfe nochmal |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich möchte mich an dieser Stelle auch noch mal bei dir bedanken hectic, das war genau die Erklärung die ich gebraucht habe. Ich werd jetzt leider die nächsten 3 Monate nicht so oft hier vorbei schauen können, aber Dank die hab ich was zum basteln ![]() (Ich möchte das ganze nicht für Autorennspiele e.t.c. missbrauchen, sondern für meinen Spaceshooter-Wahn... mir schwebt da so was wie "Bau dein eigenes Raumschiff und bestimme wo die Schubdüsen hinkommen sollen" Ding vor ![]() |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke erst mal für den vielen Lob ![]() Beschreibung: - Neue Verbindungen können wie gehabt mit der Maus gesetzt werden. - [a/y] verlängert/verkürtzt die 1. VK-Stange. - [s/x] beschleunigt die 2. und 3. VK-Stange nach vorn/hinten. - [d/c] dreht die 4. VK-Stange nach links/rechts. - [strg/alt] ein neuen KP auswählen. - [cursor] ausgewählten KP in Richtung beschleunigen. - [F1] Quickload - [F2] Quicksave - [ESC] Anim-Modus bzw. Programm beenden. Beachtet bitte, dass Quickload nur funktioniert, wenn noch keine VKs oder KPs vorhanden sind oder waren, da sonst die id-Handles auf die man als Programmierer kein Zugriff hat, durcheinander kommen. Code: [AUSKLAPPEN] ;Grafikkramm
gfx=1280 gfy=gfx*.75 ghx=gfx/2 ghy=gfy/2 Graphics gfx,gfy,0,1 SetBuffer BackBuffer() Type kp ;KnotenPunkte Field xs% ;X-Fest-Position Field ys% ;Y-Fest-Position Field xp# ;X-Position Field yp# ;Y-Position Field xg# ;X-Speed Field yg# ;Y-Speed Field at% ;mobil/fest End Type Type vk ;VerKlinkungen Field k1% ;von KP-1 Field k2% ;zum KP-2 Field ln# ;Solllänge End Type sw%=0 ;Switch id%=0 ;Handle wk#=0 ;Winkel dx#=0 ; dy#=0 ; mp%=1 ;Moving-Position nn%=0 ;GetKey-Mode-Switch gk%=0 ;GetKey-Puffer nm$="";Filename ;EDIT Hauptschleife While Not KeyHit(1) ;Mauskramm mx=MouseX() my=MouseY() nx=Int(mx/10.0)*10 ny=Int(my/10.0)*10 ;KP Erstellen If MouseHit(1) id=0 For kp.kp=Each kp If kp\xp=nx And kp\yp=ny id=Handle(kp) Next If id=0 kp.kp=New kp kp\xs=nx kp\ys=ny kp\xp=nx kp\yp=ny kp\xg=0 kp\yg=0 kp\at=0 id=Handle(kp) End If If sw=0 vk.vk=New vk vk\k1=id vk\k2=id sw=1 Else vk.vk=Last vk vk\k2=id k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) vk\ln=Sqr((k1\xp-k2\xp)^2+(k1\yp-k2\yp)^2) sw=0 End If End If ;Eigenschaft If MouseHit(2) id=0 For kp.kp=Each kp If kp\xp=nx And kp\yp=ny id=Handle(kp) Next If id<>0 k1.kp=Object.kp(id) k1\at=1-k1\at End If End If Color 32,32,48:Rect 0,gfy-40,gfx,60,1 ;Boden Color 48,48,72:For q=0 To gfx Step 10:Rect q,0,1,gfy,1:Rect 0,q,gfx,1,1:Next ;Gitter (fein) Color 64,64,96:For q=0 To gfx Step 40:Rect q,0,1,gfy,1:Rect 0,q,gfx,1,1:Next ;Gitter (grob) Color 96,96,144:Rect ghx,0,1,960,1 ;Mittellinie Color 240,240,240 ;Maus-Position Rect mx-2,my-2,5,5,1 Rect nx-4,ny-4,9,9,0 ;KPs For kp.kp=Each kp Rect kp\xp-4,kp\yp-4,9,9,kp\at Next ;VKs For vk.vk=Each vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) Line k1\xp,k1\yp,k2\xp,k2\yp If k1=k2 Line k1\xp,k1\yp,nx,ny Next If KeyHit(59) nn=1 ;Load-Modus If KeyHit(60) nn=2 ;Save-Modus If nn>0 gk=GetKey() If gk=8 If Not nm="" nm=Left(nm,Len(nm)-1) If gk>31 nm=nm+Chr$(gk) If KeyHit(57) nn=0 ;Check If nn=1 ;Handle-Konflikt For kp.kp=Each kp nn=0 Next ;Handle-Konflikt For vk.vk=Each vk nn=0 Next End If ;Load/Save If KeyHit(28) ;Load If nn=1 nn=0 ;Information einlesen If FileType(nm+".btm") file=ReadFile(nm+".btm") While Not Eof(file) If ReadByte(file)=1 kp.kp=New kp kp\xs=ReadShort(file) kp\ys=ReadShort(file) kp\xp=ReadFloat(file) kp\yp=ReadFloat(file) kp\xg=ReadFloat(file) kp\yg=ReadFloat(file) kp\at=ReadByte(file) id=Handle(kp) Else vk.vk=New vk vk\k1=ReadShort(file) vk\k2=ReadShort(file) vk\ln=ReadFloat(file) End If Wend CloseFile file End If End If ;Save If nn=2 nn=0 ;Information schreiben file=WriteFile(nm+".btm") For kp.kp=Each kp WriteByte file,1 WriteShort file,kp\xs WriteShort file,kp\ys WriteFloat file,kp\xp WriteFloat file,kp\yp WriteFloat file,kp\xg WriteFloat file,kp\yg WriteByte file,kp\at Next For vk.vk=Each vk WriteByte file,0 WriteShort file,vk\k1 WriteShort file,vk\k2 WriteFloat file,vk\ln Next CloseFile file End If End If End If ;Load/Save -Info-Anzeige If nn=1 Text 100,100,"[Load] Filename: "+nm+".btm" If nn=2 Text 100,100,"[Save] Filename: "+nm+".btm" Flip Cls Wend ;ANIM Hauptschleife While Not KeyHit(1) ;Boden Color 48,48,72 Rect 0,gfy-40,gfx,40,1 ;VKs-Update For w=1 To 8 ;Extra-Härte For vk.vk=Each vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) wk=(ATan2(k2\yp-k1\yp,k2\xp-k1\xp))Mod 360 dx=(k1\xp+Cos(wk)*vk\ln)-k2\xp dy=(k1\yp+Sin(wk)*vk\ln)-k2\yp dx=dx/3.5 dy=dy/3.5 k1\xp=k1\xp-dx k1\yp=k1\yp-dy k1\xg=k1\xg-dx k1\yg=k1\yg-dy k2\xp=k2\xp+dx k2\yp=k2\yp+dy k2\xg=k2\xg+dx k2\yg=k2\yg+dy Next Next ;KPs-Update Color 240,240,240 For kp.kp=Each kp If kp\at=1 kp\xp=kp\xs kp\yp=kp\ys kp\xg=0 kp\yg=0 End If kp\yg=kp\yg+.05 kp\xp=kp\xp+kp\xg kp\yp=kp\yp+kp\yg If kp\yp>gfy-43 kp\yp=gfy-43:kp\yg=0:kp\xg=0 Rect kp\xp-2,kp\yp-2,5,5,0 Next ;VKs zeichnen Color 64,64,96 For vk.vk=Each vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) Line k1\xp,k1\yp,k2\xp,k2\yp Next kp.kp=Last kp k1.kp=Object.kp(mp) If KeyHit(29) mp=mp-1:If mp<1 mp=Handle(kp) If KeyHit(56) mp=mp+1:If mp>Handle(kp) mp=1 If KeyDown(203) k1\xg=k1\xg-.05*Handle(kp) If KeyDown(205) k1\xg=k1\xg+.05*Handle(kp) If KeyDown(200) k1\yg=k1\yg-.05*Handle(kp) If KeyDown(208) k1\yg=k1\yg+.05*Handle(kp) Color 240,240,240:Rect k1\xp-2,k1\yp-2,5,5,1 ;[a] Erste VK verlängern If KeyDown(30) vk.vk=First vk:vk\ln=vk\ln+.5 ;[y] Erste VK verkürzen If KeyDown(44) vk.vk=First vk:vk\ln=vk\ln-.5:If vk\ln<10 vk\ln=10 ;[s] 2/3te VK vorne beschleunigen If KeyDown(31) vk.vk=First vk vk.vk=After vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) k1\xg=k1\xg-(k1\xp-k2\xp)/100 k1\yg=k1\yg-(k1\yp-k2\yp)/100 vk.vk=After vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) k1\xg=k1\xg-(k1\xp-k2\xp)/100 k1\yg=k1\yg-(k1\yp-k2\yp)/100 End If ;[x] 2/3te VK zurück beschleunigen If KeyDown(45) vk.vk=First vk vk.vk=After vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) k1\xg=k1\xg+(k1\xp-k2\xp)/100 k1\yg=k1\yg+(k1\yp-k2\yp)/100 vk.vk=After vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) k1\xg=k1\xg+(k1\xp-k2\xp)/100 k1\yg=k1\yg+(k1\yp-k2\yp)/100 End If ;[d] 4te VK links drehen If KeyDown(32) vk.vk=First vk vk.vk=After vk vk.vk=After vk vk.vk=After vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) k1\xg=k1\xg+(k1\yp-k2\yp)/40 k1\yg=k1\yg-(k1\xp-k2\xp)/40 k2\xg=k2\xg-(k1\yp-k2\yp)/40 k2\yg=k2\yg+(k1\xp-k2\xp)/40 End If ;[c] 4te VK rechts drehen If KeyDown(46) vk.vk=First vk vk.vk=After vk vk.vk=After vk vk.vk=After vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) k1\xg=k1\xg-(k1\yp-k2\yp)/40 k1\yg=k1\yg+(k1\xp-k2\xp)/40 k2\xg=k2\xg+(k1\yp-k2\yp)/40 k2\yg=k2\yg-(k1\xp-k2\xp)/40 End If Flip Cls Wend End In dieser kann man: - mit [a/y] den Kran bediehnen, - mit [s/x] die Rakette starten, - mit [d/c] das Fahrzeug fahren. Beachtet hier bitte, dass in dem Beispiel test1.btm die Auflösung von 1280x960 eingehalten werden muß. Eine Skallierung zwischen Auflösungen und dem Abspeichern habe ich noch nicht eingebaut, auch wenn dies nicht schwer währe. Sorry... Viel Spaß damit... ![]() |
||
- Zuletzt bearbeitet von hectic am Fr, Aug 28, 2009 18:48, insgesamt einmal bearbeitet
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Coole Sache ![]() ![]() Kennt vielleicht einer von euch das Spiel "Bridge Builder"?? Da muss man über Gräben/Schluchten ect. Brücken für Züge oder Autos bauen. Anschließend müssen die eine "Belastungsprobe" (=Zug/Auto) bestehen. Das Spiel funktioniert nach diesem Prinzip... es gibt außerdem mehrere Materialien (auch Seile, die sind elastisch) und wenn die Belastung an einem Punkt zu groß wird, reißt er ^^ |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Stevenehemals "Steven04" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich verstehe das irgendwie nicht ganz mit der "Verkleidung". Habe so etwas aber auch noch nie gemacht...
Könntest du das vllt ein bisschen genauer erklären, wie man es berechnen soll oder einen kleinen Ansatz schreiben? Bedanke mich jetzt schonmal für die Antworten.... |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Steven04, es heisst bei mir nicht 'Verkleidung' sondern 'Verklinkung' und diese geben an, welche Knotenpunkte miteinander verbunden sind (vergleichbar in etwa, in ihrer Länge elastische Stangen). Die Funktionsweise habe ich bereits mehrfach beschrieben.
Denoch versuch ich es nochmal zu erklären: - Bei mir KP genannt, sind Knotenpunkte die durch ihre gespeicherte Geschwindigkeit ihre Masse und der darin angewandten Gravitation ihr Gewicht mitsich bringen. KPs haben also Position und Geschwindigkeit und werden in einer Schleife pro Schleifendurchlauf jeweils einzelnd neu berechnet (Energieerhaltungssatz etc.). - Bei mir VK genannt, sind Verklinkungen die durch angabe, welche KPs miteinander verbunden sind und deren Sollentfernung, eine 'Strucktur' bilden. VKs haben also nur Verbindungen zweier KPs und deren Sollentfernung gespeichert. Pro Schleifendurchlauf wird jede VK einzelnd durchgangen, die dann eine Korrektur der KP-Schleife und direkt in dieser durchnimmt. Das heisst: Ist zB durch Äussere Einwirkung eine Verformung der Grundstrucktur eingetretten, so wird die VK-Schleife diese versuchen stetts zu korregieren und in die Ausgangssituation zu bringen. Dabei wird in jeweils beider Richtungen der VK korrigiert (wir errinern uns 'Stangen'). Ist die eine Seite verhindert (zB Bodenkontakt), so geht die Verformungsenergie nur noch in die andere Richtung. Dadurch 'federt' die Strucktur erst ein und dann wieder zurück. Dabei entsteht ein leichter Sprungeffekt, der durch die Massenträgheit der KPs zustande kommt. Programmierung naiver physikalischer Grundstrukturen. |
||
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group