schneefall simulieren (erledigt)
Übersicht

![]() |
DragonkillerBetreff: schneefall simulieren (erledigt) |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab ein problem bei meiner schneefallsimulation und zwar möchte ich das der schnee sich stapelt aber irgendwas stimmt bei der kollision anscheinend nicht hier mal der code
Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() schnee_weis=LoadImage("schnee_weis.jpg") schnee_grau=LoadImage("schnee_grau.jpg") SeedRnd MilliSecs() Type schnee Field x,y,imagewahl,image,liegen,stapeln End Type While Not KeyHit(1) For i=1 To 1 flocke.schnee = New schnee flocke\x = Rnd(0,800) flocke\y = 0 flocke\imagewahl = Rnd(0,1) Select flocke\imagewahl Case 0 flocke\image = schnee_weis Case 1 flocke\image = schnee_grau End Select flocke\liegen = False flocke\stapeln = False Next For flocke.schnee = Each schnee flocke\x = flocke\x+1*Rnd(-1,1) If (flocke\liegen=False) Or (flocke\stapeln=False) flocke\y = flocke\y+Rnd(0.5,1) EndIf If flocke\y > 597 Then flocke\liegen=True If (flocke\liegen = True) And (ImagesCollide(flocke\image,2,3,0,flocke\image,2,3,0)) Then flocke\stapeln = True DrawImage flocke\image,flocke\x,flocke\y Next Flip Cls Wend End |
||
- Zuletzt bearbeitet von Dragonkiller am Fr, März 30, 2007 9:31, insgesamt 2-mal bearbeitet
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schnee und ImagesCollide ist ein Widerspruch in sich. Der Befehl ist viel zu langsam für so einen massiven Einsatz.
Ich würde dir eher eine einfache Rect-Überprüfung raten oder mit einzelnen Pixeln als Flocken arbeiten. |
||
![]() |
Dragonkiller |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würd das aber gerne so machen und außerdem haben die schneeflocken eine größe von 2*3 pixel | ||
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schau dir mal meinen Code an, evtl. kannst du damit was anfagen:
Code: [AUSKLAPPEN] Const GRX=800,GRY=600 Graphics GRX,GRY,32,2 timer=CreateTimer(600) Dim Schnee(GRX,GRY) HintergrundImg=CreateImage(GRX,GRY) ;flocken images erstellen FlockeImg=CreateImage(8,8,6) Type flocke Field x#,y#,xs#,r# End Type For t=0 To 5 Color 50+t*40,50+t*40,50+t*40 SetBuffer ImageBuffer(FlockeImg,t) r#=t*1.5 Oval 0,0,t*1.5,t*1.5 Next ;Wunderschönen Hintergrund erstellen SetBuffer ImageBuffer (HintergrundImg) SetFont LoadFont("",200,1) Text GRX*0.5,GRY*0.5,"Winter",1,1 LockBuffer For y=0 To GRY-1 c=(y*0.1) Shl 16 + (y*0.17) Shl 8 + (y*0.25)+10 For x=0 To GRX-1 ;wo Text steht Schnee-Dim auf 1 setzten: If ReadPixelFast(x,y)=$FF000000 WritePixelFast x,y,c Else Schnee(x,y)=1: WritePixelFast x,y,$FF886633+(255-y*0.65)*x/(y+1) ;den Boden mit Schnee bedecken damit flocken nicht durchfallen If y>597 Schnee(x,y)=1 Next Next UnlockBuffer SetBuffer BackBuffer() ;flocken initialisieren For t=1 To 1500 f.flocke=New flocke f\r=Rand(1,4) ;flocken nicht auf textstellen positionieren (sieht unschön aus) Repeat f\x=Rand(GRX):f\y=Rand(GRY) Until Schnee(f\x,f\y)=0 Next While Not KeyHit(1) DrawImage HintergrundImg,0,0 ;zufall windrichtung wx#=wx#+wxs#:If wx<-0.5 wx=-0.5 Else If wx>0.5 wx=0.5 wxs=wxs+Rnd(-0.001,0.001):If wxs<-0.03 wxs=-0.03 Else If wxs>0.03 wxs=0.03 For f.flocke=Each flocke ;flocken bewegung / grenzen testen f\x=f\x+f\xs+wx : If f\x<1 f\x=GRX-2 Else If f\x>GRX-2 f\x=1 f\y=f\y+f\r*0.4 : If f\y<1 f\y=1 Else If f\y>GRY-2 f\y=GRY-2 f\xs=f\xs + Rnd(-0.005,0.005) * f\r ;testen ob sich unterhalb der flocke schnee befindet If Schnee(f\x,f\y+1)<>0 ;abhang runterrutschen f\x=f\x+(Schnee(f\x-1,f\y+1)-Schnee(f\x+1,f\y+1)) EndIf ;flocke trifft auf Schnee: If Schnee(f\x,f\y)<>0 ;schneewert berechnen (sorgt für schöne abgerundete schneekuppen) Schnee(f\x,f\y-1)=(Schnee(f\x-1,f\y)+Schnee(f\x+1,f\y)+Schnee(f\x,f\y-1)+Schnee(f\x,f\y+1))*0.25 SetBuffer ImageBuffer(HintergrundImg) ;flocke in flockenimage zeichnen Color Rnd(210,255),Rnd(210,255),Rnd(220,255) Oval f\x,f\y-1,f\r,f\r SetBuffer BackBuffer() ;neue flocke erstellen f\y=0 : f\x=Rnd(GRX):f\xs=0 EndIf DrawImage FlockeImg, f\x-2,f\y-2, f\r Next Flip 0 ; WaitTimer timer Wend |
||
joni8a |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe auch ne frage zu types wiseo funktioniert dieser code nicht?
Code: [AUSKLAPPEN] Graphics 640,480 SetBuffer BackBuffer() Type alien Field x Field y End Type Global a.alien For i=1 To 10 a=New alien a\x=Rnd(0,640) a\y=Rnd(0,480) Next For a=Each alien Print a\x Print a\y Next Repeat Cls Rect a\x,a\y,20,20 Flip Until KeyHit(1) |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit dem Code wirst du nur ein Rechteck zeichnen, und zwar an die Stelle des letzten Aliens, da du in der Hauptschleife kein "For a=Each alien" hast. | ||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group