2D-Blitz

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

SpionAtom

Betreff: 2D-Blitz

BeitragFr, Okt 28, 2005 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal nach einer Möglichkeit gesucht, einen Blitz darzustellen.
Folgende Lösung ist herausgekommen:

Code: [AUSKLAPPEN]

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. Wink

Jan_

Ehemaliger Admin

BeitragFr, Okt 28, 2005 8:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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: [AUSKLAPPEN]
Const xr = 800, yr = 600 
Graphics xr, yr, 16, 2
SetBuffer BackBuffer()



toleranz = 100
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()*5
If toleranz < 0 Then toleranz = 0


;Berechnungen
xdif# = epx-spx
ydif# = epy-spy
g=(g+Rand(toleranz)) Mod 90
For i = 1 To segmente
segp(i,0) = spx + (i-1)*(xdif#/segmente) +(Sin(g+ (g*Sin(90.0*i/segmente )))*toleranz)*Sin(180*i/segmente)
segp(i,1) = spy + (i-1)*(ydif#/segmente) +(Cos(g+ (g*Sin(90.0*i/segmente )))*toleranz)*Sin(180*i/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)+ Rand(-toleranz/4.0,toleranz/4.0)
py2 = segp(i,1)+ Rand(-toleranz/4.0,toleranz/4.0)
Color 150, 150, 255
Line px1, py1+1, px2, py2 +1
Line px1, py1-1, px2, py2 -1
Color 0, 0, 255
Line px1, py1, px2, py2
px1 = px2
py1 = py2
Next
Color 150, 150, 255
Line px1, py1+1, px2, py2 +1
Line px1, py1-1, px2, py2 -1
Color 0, 0, 255
Line px1, py1, epx, epy


Flip()




Until KeyDown(1)
[/code]
between angels and insects

Lord_Vader

BeitragFr, Okt 28, 2005 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

SpionAtom

BeitragFr, Okt 28, 2005 9:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@Jan_
Sehr schöne Idee mit dem Sinus und dem kurvigen Verlauf.
Eine dickere Linie macht auch schon viel mehr her. Very Happy

@Lord_Vader
Das stimmt, aber ich dachte, da es ein funktionierener Code ist, braucht man es dem Codearchiev nicht vorzuenthalten. Wink

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Nov 10, 2005 2:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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: [AUSKLAPPEN]
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

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group