Fliegende Kanonenkugeln (2D) von ??? |
[code:1:bab57b6e30] AppTitle "Fliegende Kanonenkugeln" ; Richtung, Speed und Masse der Kugeln sind genauso einstellbar wie die Gravität. ; Der Wind dreht sich mit ebenfalls einstellbarer Windstärke. ; ; Ballphysikalisch angeregt durch einen Source Code von Jeppe Nielsen Const bb=1024 Const hh= 768 Const bbb=bb/32 Const bbk=.5*bb;Standort der Kanone Const hhk=.9*hh Const bbr=.8*bb;Standort Windrose Const hhr=.2*hh windowsverzeichnis$= SystemProperty$("WINDOWSDIR") doof = LoadSound(windowsverzeichnis$ +"mediair_begin.wav") Global masse# = 1 Global speed# = 0 Global kraft# =10 Global gravitaet# = 0.05 Global windspeed# = 0.1 Global windrichtung#=90 Global winkel# Global nK.Kugel Global mx,my Type Kugel Field masse# Field speed# Field x#,y# Field sx#,sy# End Type Graphics bb,hh,16,1 SetBuffer BackBuffer() ClsColor 0,0,16 Repeat Cls mx=MouseX() my=MouseY() kraft#=Float(Sqr((bbk-mx)^2+(hhk-my)^2))/10 winkel#=ATan2(my-hhk,mx-bbk) rtx=bbk+ bbb*Cos(winkel) rty=hhk+ bbb*Sin(winkel) ttx=bbk-2*bbb*Cos(winkel) tty=hhk-2*bbb*Sin(winkel) wkraft#=windspeed#*25 twx=bbr+ bbb*Cos(windrichtung)*wkraft# twy=hhr+ bbb*Sin(windrichtung)*wkraft# ;die Kanone KREIS(bbk,hhk,2,255, 0,0):LINIE(rtx,rty,ttx,tty,255, 0,0) ;die Windrose Color 32, 32,0:Oval bbr-bbb*wkraft#,hhr-bbb*wkraft#,2*bbb*wkraft#,2*bbb*wkraft# KREIS( mx, my,3,255,255,0):LINIE(bbr,hhr,twx,twy,255,255,0) TEXTEMALEN() TASTENDRUCK() ALLESNEU() ALLESMALEN() If MouseDown(1) Then nK=KUGELNEU.Kugel(masse#,bbk,hhk,kraft#,winkel) : aua = PlaySound(doof) ; If Not ChannelPlaying(aua) Then aua = PlaySound(doof) linksrechts=Int(Rnd(0,99)) If linksrechts<10 Then windrichtung#=windrichtung#+1 Else windrichtung#=windrichtung#-1 If windrichtung#< 0 Then windrichtung#=359 If windrichtung#>359 Then windrichtung#= 0 Flip Until KeyDown(1) End Function KUGELNEU.Kugel(mm#,xx,yy,kk#,ww) K.Kugel=New Kugel Kmasse# =mm# Kx =xx Ky =yy Kspeed# =kk#/mm# Ksx# =Cos(ww)*Kspeed# Ksy# =Sin(ww)*Kspeed# Return K End Function Function ALLESNEU() windx#=Cos(windrichtung#)*windspeed# windy#=Sin(windrichtung#)*windspeed# For K.Kugel=Each Kugel Ksx# =Ksx#+(windx#/Kmasse#) Ksy# =Ksy#+(windy#/Kmasse#)+gravitaet# Kx# =Kx+Ksx# Ky# =Ky+Ksy# If Kx < -.5*bb Or Kx > 1.5*bb Or Ky < -.5*hh Or Ky > hh Then Delete K ; If Kx<0 Or Kx>bb Or Ky<0 Or Ky>hh Then Delete K Next End Function Function ALLESMALEN() For K.Kugel=Each Kugel KREIS (Kx,Ky,Kmasse,255,255,0) Next End Function Function TEXTEMALEN() Color 255, 0,0: Text 10,10,"Kraft :"+Int(kraft#) Text 10,25,"Winkel:"+Int(winkel#) Text 10,40,"Masse :"+masse# Color 0, 0,255: Text 10,110,"Kugeldicke:" Text 10,125,"Cursor ho/ru" Text bb-100,110,"Windstärke:" Text bb-100,125,"Cursor li/re" Text .45*bb,110,"Gravität" Text .45*bb,125,"Bild ho/ru" Text .4*bb,hh-50,"Dauerfeuer = Maus gedrückt halten" Color 0,255, 0: Text .85*bb,10,"Windstärke :"+windspeed# Text .85*bb,25,"Windrichting:"+Int(windrichtung#) Color 255,255,0: Text .45*bb,25,"Gravität :"+gravitaet# If nK<>Null Then Text 10,60,"Speed letzte Kugel: "+Sqr(nKsx#^2+nKsy#^2) End Function Function TASTENDRUCK() If KeyDown(200) Then masse#=masse#+0.5 If KeyDown(208) Then masse#=masse#-0.5:If masse#<1 Then masse#=1 If KeyDown(201) Then gravitaet#=gravitaet#+0.01 If KeyDown(209) Then gravitaet#=gravitaet#-0.01 If KeyDown(203) Then windspeed#=windspeed#-0.001:If windspeed#<0 Then windspeed#=0 If KeyDown(205) Then windspeed#=windspeed#+0.001 If windspeed# > 0.192 Then windspeed# = 0.192 End Function Function LINIE(x1,y1, x2,y2, r,g,b) rgb = r*$10000 + g*$100 + b dx = x2 - x1 dy = y2 - y1 If dx > 0 Then ddx = 1 Else ddx = -1 If dy > 0 Then ddy = 1 Else ddy = -1 LockBuffer BackBuffer() If Abs(dy) < Abs(dx) Then fehler = -Abs(dx) delta = 2*Abs(dy) schwelle = 2*fehler While x1 <> x2 WritePixelFast x1, y1, rgb fehler = fehler + delta : x1 = x1 + ddx If fehler > 0 Then fehler = fehler + schwelle : y1 = y1 + ddy Wend Else fehler = -Abs(dy) delta = 2*Abs(dx) schwelle = 2*fehler While y1 <> y2 WritePixelFast x1, y1, rgb fehler = fehler + delta : y1 = y1 + ddy If fehler > 0 Then fehler = fehler + schwelle : x1 = x1 + ddx Wend EndIf WritePixelFast x2, y2, rgb UnlockBuffer BackBuffer() End Function Function KREIS(x,y,Radius,r,g,b) rgb = r*$10000 + g*$100 + b Local dx = 0 Local dy = Radius Local dr = 3 - (Radius Shl 2) While dx < dy WritePixel x+dx,y+dy,rgb: WritePixel x+dx,y-dy,rgb: WritePixel x-dx,y+dy,rgb: WritePixel x-dx,y-dy,rgb WritePixel x+dy,y+dx,rgb: WritePixel x+dy,y-dx,rgb: WritePixel x-dy,y+dx,rgb: WritePixel x-dy,y-dx,rgb If dr < 0 Then dr = dr + (dx Shl 2) + 6 Else dr = dr + ((dx-dy) Shl 2) + 12: dy = dy - 1 dx = dx + 1 Wend If dx = dy Then WritePixel x+dx,y+dy,rgb: WritePixel x+dx,y-dy,rgb: WritePixel x-dx,y+dy,rgb: WritePixel x-dx,y-dy,rgb End Function [/code:1:bab57b6e30] |
..... von ??? |
Hmmm..Komisch. Konnte es nicht testen. Habe Code Kopiert und der Fügt es ziemlich falsch ein in BB.Scheint wohl probleme mit Variablen nach ":" zu geben. Aber so auf den ersten Blick auf den Code ist mir aufgefallen das du z.b. Plot benutzt. Das ist recht lahm, ziehe WritePixelFast in erwägung. bye |
von ??? |
problem ist hoffentlich behoben, da waren smileys drin |
.... von ??? |
Ja, nun klappt es. Netter Source, gefällt mir. bye |
von ??? |
Wäre halt nicht schlecht wenn du den source zwischen code tags stellen würdest! |
von ??? |
Code ist leicht überarbeitet (writepixel statt plot). writepixelfast würde nur gehen, wenn man den Kugelschweif radikal abschneidet, sobald er an den Rand kommt. Und das sähe dann ziemlich doof aus... |
von ??? |
Junge, wieso machst du die Code-Tags wieder weg? *grummel* - ihr macht einem aber auch Arbeit... |
von ??? |
sorry, den (code)-tag hatte ich übersehen; ich hab jetzt noch mal etwas mehr Struktur reingebracht, diesmal ohne den tag zu überschreiben. |