Schnee fällt zu schnell

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mabox

Betreff: Schnee fällt zu schnell

BeitragDo, Feb 01, 2007 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollte hier einen kleinen Schnee-Bildschirmschoner machen aber der Schnee fällt aus unerklärlichen Gründen viel zu schnell dabei hab ich den Speed auf 10 gestellt und auch schon 1 und 0,1 für den speed ausprobiert.

Hier ist der Code: [AUSKLAPPEN]
Graphics 640,480,16,1
SetBuffer BackBuffer()
AppTitle "Winter"

Global landschaft=LoadImage ("schnee.bmp")

Dim X(1400), Y(1400), V(1400)

MoveMouse 100,100
Repeat
   If MouseX() <> 100 Then End
   If MouseY() <> 100 Then End
   If GetKey() <> 0   Then End
   If GetMouse() <> 0 Then End

Cls

DrawImage landschaft,0,0

   For i=0 To 1400
      X(i)=Rnd(0,640)
      Y(i)=Rnd(0,480)
      V(i)=Rnd(1,10)
   Next

   For i=0 To 1400
      Y(i)=Y(i)+V(i)
      If Y(i)>480 Then Y(i)=0: V(i)=Rnd(1,10)
      Plot X(i),Y(i)
   Next
   
 
   Flip
Forever

Ich habe auch schon die Zahl der Schneeflocken runter gestellt aber das half auch nichts.
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

PowerProgrammer

BeitragDo, Feb 01, 2007 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Die einfachste Lösung: ein Delay einbauen (besser einen Timer mit MilliSecs())
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

TheMatrix

BeitragDo, Feb 01, 2007 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir nocheinmal ganz genau deinen Code an und achte was du überhaupt machst. Du weist den Pixeln in jeden Frame(Das sind hier so 300 in der Sekunde) immer wieder einen neuen x,y und speed wert zu. D.h. die Pixel werden frame für frame immer wieder wo anders gezeichnet. So kannst du höchstens ein Programm für Epileptiker schreiben Wink . Mach es so:
gebe vor der Schleife allen Pixeln einen zufalls- x,y und Speedwert und lasse dann die pixel durch v fallen. Erreichen die Pixel 480 dann stell den Y-Wert wieder auf 0.

Gruß, Manu
°_° °.° °~° °v° .. -.-

ToeB

BeitragDo, Feb 01, 2007 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal 'n code, der kann auch die Schnelle verändert werden:
Code: [AUSKLAPPEN]

Graphics 800,600,16,1
SetBuffer BackBuffer()

SeedRnd MilliSecs()

Type s
Field x
Field y
Field a
End Type

Global s.s

Repeat
A = Rand(0,2)
X = Rand(800)
Y = Rand(600)
If A = 0 Then
s.s = New s
s\x = X
s\y = 0
s\a = 0
ElseIf A = 1
s.s = New s
s\x = X
s\y = Y
s\a = 1
ElseIf A = 2
s.s = New s
s\x = X
s\y = Y
s\a = 2
EndIf

For s.s = Each s
Plot s\x,s\y
If s\a = 0 Then s\y = s\y + 5
If s\a = 1 Then s\x = s\x - 5:s\y = s\y + 5
If s\a = 2 Then s\x = s\x + 5:s\y = s\y + 5
Next

Flip
Cls

Until KeyHit(1)
End


Ich hoffe ich konnte 'n bisschen helfen.

mfg

~EDIT~
Update ^^ :
Code: [AUSKLAPPEN]

Graphics 800,600,16,1
SetBuffer BackBuffer()

SeedRnd MilliSecs()

Type s
Field x
Field y
Field a
End Type

Global s.s

Repeat
A = Rand(0,7)
X = Rand(800)
Y = Rand(600)
If A = 0 Then
s.s = New s
s\x = X
s\y = 0
s\a = 0
ElseIf A = 1
s.s = New s
s\x = X
s\y = Y
s\a = 1
ElseIf A = 2
s.s = New s
s\x = X
s\y = Y
s\a = 2
ElseIf A = 3
s.s = New s
s\x = X
s\y = 600
s\a = 3
ElseIf A = 4
s.s = New s
s\x = 0
s\y = Y
s\a = 4
ElseIf A = 5
s.s = New s
s\x = 800
s\y = Y
s\a = 5
ElseIf A = 6
s.s = New s
s\x = X
s\y = Y
s\a = 6
ElseIf A = 7
s.s = New s
s\x = X
s\y = Y
s\a = 7
EndIf

For s.s = Each s
Plot s\x,s\y
If s\a = 0 Then s\y = s\y + 5
If s\a = 1 Then s\x = s\x - 5:s\y = s\y + 5
If s\a = 2 Then s\x = s\x + 5:s\y = s\y + 5
If s\a = 3 Then s\y = s\y - 5
If s\a = 4 Then s\x = s\x + 5
If s\a = 5 Then s\x = s\x - 5
If s\a = 6 Then s\x = s\x + 5:s\y = s\y - 5
If s\a = 7 Then s\x = s\x - 5:s\y = s\y - 5
Next

Flip
Cls

Until KeyHit(1)
End


Wink
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Tankbuster

BeitragDo, Feb 01, 2007 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht auch kürzer:
Jede schneeflocke hat sogar eigenen speed zwischen 1 und 3 xD

Zitat:
Type schnee
Field x,y
Field speed
End Type

Graphics 800,600,16,1
SetBuffer BackBuffer()
Color 255,255,255

anzahlschnee=2000

bildschirmbreite=800
bildschirmhohe=600

For t=1 To anzahlschnee
s.schnee = New schnee
s\x = Rnd(bildschirmbreite) ;veränderbar (je nach auflösung
s\y = Rnd(-800,0)
s\speed=Rnd(1,3)
Next

While Not KeyDown(1)
Cls
For s.schnee = Each schnee
Plot s\x,s\y
s\y=s\y+s\speed
If s\y>bildschirmhohe Then
s\y = 0;veränderbar^^
s\x = Rnd(bildschirmbreite)
EndIf
Next
Flip
Wend
Twitter
Download Jewel Snake!
Windows|Android
 

Problemchen

BeitragDo, Feb 01, 2007 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, so fällt der Schnee immer gleich schnell:
Code: [AUSKLAPPEN]
Type schnee
Field x#,y#
Field speed#
End Type

Graphics 800,600,16,1
SetBuffer BackBuffer()
Color 255,255,255

Global startzeit,schleifenzeit

anzahlschnee=2000

bildschirmbreite=800
bildschirmhohe=600

For t=1 To anzahlschnee
s.schnee = New schnee
s\x# = Rnd(bildschirmbreite) ;veränderbar (je nach auflösung
s\y# = Rnd(-800,0)
s\speed#=Rnd#(.1,.3)
Next

While Not KeyDown(1)
   startzeit=MilliSecs()
   Cls
   For s.schnee = Each schnee
      Plot s\x,s\y
      s\y#=s\y#+frametimer#(s\speed#)
      If s\y#>bildschirmhohe Then
         s\y# = 0;veränderbar^^
         s\x# = Rnd(bildschirmbreite)
      EndIf
   Next
   Flip
   schleifenzeit=MilliSecs()-startzeit
Wend

Function frametimer#(bewegung#)
    wert# = bewegung# * (schleifenzeit)
    Return wert#
End Function

Wink
Problemchen

Tankbuster

BeitragDo, Feb 01, 2007 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
In der Realität fällt der Schnee aber NIE gleichschnell Razz
Twitter
Download Jewel Snake!
Windows|Android

TheMatrix

BeitragDo, Feb 01, 2007 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hässlich^^

Es geht auch noch viel kürzer Rolling Eyes und viel schöner Very Happy

Code: [AUSKLAPPEN]

Graphics 640,480,16,0 : SetBuffer BackBuffer() : AppTitle "Winter"

anz = 500 : Dim s(anz,3)
For a=1 To anz
 s(a,0) = Rnd(640) ; X
 s(a,1) = Rnd(480) ; Y
 s(a,2) = Rnd(1,3) ; Fallgeschw.
 s(a,3) = Rnd(-2,2) ; Windeinfluß
Next

fps=CreateTimer(50)
While Not KeyHit(1)
  WaitTimer(fps) : Cls

  For i=1 To anz
   s(i,0) = s(i,0) + Rnd(s(i,3))
   s(i,1) = s(i,1) + s(i,2)
   c = s(i,2)*75
   Color c,c,c : Oval s(i,0),s(i,1),s(i,2),s(i,2)
   If s(i,1)>480 Then s(i,0)=Rnd(640) : s(i,1)=0
  Next
   
   Flip
Wend
°_° °.° °~° °v° .. -.-
 

Problemchen

BeitragDo, Feb 01, 2007 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
@Tankbuster: meinte ja auch unabhängig der FPS Cool ...

mabox

Betreff: Danke !

BeitragFr, Feb 02, 2007 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen vielen dank ihr alle !!! Smile
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group