2D-Blitz
Übersicht

![]() |
SpionAtomBetreff: 2D-Blitz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab mal nach einer Möglichkeit gesucht, einen Blitz darzustellen.
Folgende Lösung ist herausgekommen: Code: Const xr = 800, yr = 600 Graphics xr, yr, 16, 2 SetBuffer BackBuffer() toleranz = 10 maxsegmente = 50 segmente = 20 Dim segp#(maxsegmente,2) spx = 50 spy = 150 epx = 700 epy = 500 Repeat ;Eingaben If MouseDown(1) Then spx = MouseX():spy = MouseY() If MouseDown(2) Then epx = MouseX():epy = MouseY() If Not MouseDown(3) Then segmente = segmente + MouseZSpeed() If segmente < 1 Then segmente = 1 If segmente > maxsegmente Then segmente = maxsegmente If MouseDown(3) Then toleranz = toleranz + MouseZSpeed() If toleranz < 0 Then toleranz = 0 ;Berechnungen xdif# = epx-spx ydif# = epy-spy For i = 1 To segmente segp(i,0) = spx + (i-1)*(xdif#/segmente) segp(i,1) = spy + (i-1)*(ydif#/segmente) Next Cls ;Hilfetext Color 0,150,0:Oval spx-10,spy-10,20,20,1 Color 0,0,150:Oval epx-10,epy-10,20,20,1 Color 255, 255, 255 Text spx-30, spy-25,"Startpunkt" Text epx-30, epy-25,"Endpunkt" Text 0,0,"Startpunkt setzen = Linksklick" Text 0,20, "Endpunkt setzen = Rechtsklick" Text 0,40, "segmente = Mausrad ("+segmente+" Segmente vorhanden) mehr Segmente machen den Blitz kleinschrittiger" Text 0,60, "Toleranz = gedrücktes Mausrad (Toleranz "+toleranz+") eine größere Toleranz macht den Blitz breiter" Color 255,0,0 For i = 1 To segmente Oval segp(i,0)-1, segp(i,1)-1,2,2,1 Next ;Blitzen px1 = spx py1 = spy For i = 1 To segmente px2 = segp(i,0)+ toleranz - Rand(2*toleranz) py2 = segp(i,1)+ toleranz - Rand(2*toleranz) Color 255, 255, 0 Line px1, py1, px2, py2 px1 = px2 py1 = py2 Next Line px1, py1, epx, epy Flip() Until KeyDown(1) Wer Verbesserungsvorschläge oder gar ganz andere Ansätze, der möge sie bitte posten. ![]() |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Idee,
Ein Blitz Steuert, 1mal hauptsächlcih aus, und Trifft sich wieder im Ziel. Aber auf den weg, der "Hauptaussteuerung" gibt es noch viele kleine aussteuerungen. BlitzBasic: Const xr = 800, yr = 600[/code] |
||
between angels and insects |
![]() |
Lord_Vader |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schöne sache das ganze!
Hast du glaub ich schonmal in einem thread gezeigt, keine schlechte idee! Das ganze in 3D mit Sprite dann hat man schonwas ![]() |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Jan_
Sehr schöne Idee mit dem Sinus und dem kurvigen Verlauf. Eine dickere Linie macht auch schon viel mehr her. ![]() @Lord_Vader Das stimmt, aber ich dachte, da es ein funktionierener Code ist, braucht man es dem Codearchiev nicht vorzuenthalten. ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Blitz hat auch die Eigenschaft bevorzugt den gleichen Weg zu hinterlegen, da sich die Luftfeuchtigkeit, Schmutz etc. in der Luft nicht so schnell ändert. Hier mal ein kleines Beispiel dazu.
Code: Graphics 800,800,0,2
SetBuffer BackBuffer() HidePointer q%=0 ;Schleifenvariable p%=0 ;Zufallsposition Dim b#(20,3) ;Blitz b(20,0)=700 b(20,1)=700 b(0,0)=100 b(0,1)=100 While Not KeyHit(1) ;Startpunkt setzen If MouseDown(1) Then b(0,0)=MouseX() b(0,1)=MouseY() verlauf End If ;Endpunkt setzen If MouseDown(2) Then b(20,0)=MouseX() b(20,1)=MouseY() verlauf End If ;Neue Zufallsposition p=Rand(1,19) b(p,0)=b(0,0)+(b(20,0)-b(0,0))*p/20 b(p,1)=b(0,1)+(b(20,1)-b(0,1))*p/20 b(p,2)=Rnd(-1,1) b(p,3)=Rnd(-1,1) ;Blitz zeichnen For q=0 To 19 b(q,0)=b(q,0)+b(q,2) b(q,1)=b(q,1)+b(q,3) Line b(q,0),b(q,1),b(q+1,0),b(q+1,1) Next ;Informationen Text b(0,0)-4,b(0,1)-6,"L" Text b(20,0)-4,b(20,1)-6,"R" Rect MouseX()-6,MouseY()-6,13,13,0 Flip Cls Wend End Function verlauf() For q=1 To 19 b(q,0)=b(0,0)+(b(20,0)-b(0,0))*q/20 b(q,1)=b(0,1)+(b(20,1)-b(0,1))*q/20 Next End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group