SYSTEMPOINTER TRUE
SETSCREEN 640,480,1
TYPE star
x
y
ENDTYPE
LOCAL S AS star
LOCAL stars[] AS star
WHILE TRUE
starX = RND(640)
S.x = starX
S.y = -10
DIMPUSH stars[], S
FOREACH check IN stars[]
INC check.y,RND(3)
SETPIXEL check.x, check.y, RGB(RND(255),RND(255),RND(255))
IF check.y > 480 THEN DELETE check
NEXT
SHOWSCREEN
WEND
END
wers brauch ;)
@Schranz0r
Ich z.B. :))
Also, ich finde es schon interessant, dass man mit ein paar Zeilen diesen (in der früheren Demoszene höufiger gesehenen Effekt) zu erstellen.
Wobei meine NEwbie Frage gleich mal raus muss...
Warum beginnt es mit:
SYSTEMPOINTER TRUE
Wenn FALSE dort steht, gibtes doch auch keine Veränderung...oder??
Wofür steht denn dieser Befehl in Deinem Beispiel??
Greetz Antidote
Schön, so langsam komm ich dann auch mal in das geheimnis dieser Typs :)
Aber nun zu einer frage.
Im moment habe ich ca. 300 partikel, wie grenze ich das ein das, z.B nur 50 angezeigt werden,
und danch wieder 50 ?
Lass einen Index mitlaufen, und brich ab:
index=0
FOREACH blah in blahblah[]
INC index,1
IF index>50 THEN BREAK
...
NEXT
Ah ja.
OK, irgendwie steh ich heut auf dem Schlauch :(
Das mit dem Index hab ich drin, functioniert auch.
Nur, Die sterne fallen nun auch nur soweit bis der Index erreicht ist.
Ich möchte gerne das sie festgelegte anzahl der Sterne auch bis zum Bildschirmende fallen.
Hier mal der Code dazu.
SYSTEMPOINTER FALSE
SETSCREEN 640,480,0
TYPE star // Type erstellen
x
y
index
ENDTYPE
LOCAL S AS star // s ist type von star
LOCAL stars[] AS star // Array als star
WHILE TRUE
starX = RND(640) // Zufalls startposition x achse
S.x = starX // x achse s.x zuweisen
S.y = -10 // s.y 10 nach unten rutschen
DIMPUSH stars[], S // array erhöhen/vergrössern
FOREACH check IN stars[]
INC S.index,1
INC check.y,RND(3)
SETPIXEL check.x, check.y, RGB(RND(255),RND(255),RND(255))
IF check.y > 480 THEN DELETE check
IF S.index > 50
S.index = 0
DELETE check
BREAK
ENDIF
NEXT
PRINT BOUNDS(stars[],0),10,10
SHOWSCREEN
WEND
END
So in etwar ?
SYSTEMPOINTER FALSE
SETSCREEN 640,480,0
TYPE star // Type erstellen
x
y
ENDTYPE
LOCAL S AS star // s ist type von star
LOCAL stars[] AS star // Array als star
WHILE TRUE
IF BOUNDS(stars[],0) < 50
starX = RND(640) // Zufalls startposition x achse
S.x = starX // x achse s.x zuweisen
S.y = -10 // s.y 10 nach unten rutschen
DIMPUSH stars[], S // array erhöhen/vergrössern
ENDIF
FOREACH check IN stars[]
INC check.y,RND(3)
SETPIXEL check.x, check.y, RGB(RND(255),RND(255),RND(255))
IF check.y > 480 THEN DELETE check
NEXT
PRINT BOUNDS(stars[],0),10,10
SHOWSCREEN
WEND
END
wenns dir zu viel auf einen Haufen sind mach nen Timer mit rein !
SYSTEMPOINTER FALSE
SETSCREEN 640,480,0
TYPE star // Type erstellen
x
y
ENDTYPE
LOCAL S AS star // s ist type von star
LOCAL stars[] AS star // Array als star
WHILE TRUE
IF BOUNDS(stars[],0) < 50 AND timer < GETTIMERALL()
starX = RND(640) // Zufalls startposition x achse
S.x = starX // x achse s.x zuweisen
S.y = -10 // s.y 10 nach unten rutschen
DIMPUSH stars[], S // array erhöhen/vergrössern
timer = GETTIMERALL()+90
ENDIF
FOREACH check IN stars[]
INC check.y,RND(3)
SETPIXEL check.x, check.y, RGB(RND(255),RND(255),RND(255))
IF check.y > 480 THEN DELETE check
NEXT
PRINT BOUNDS(stars[],0),10,10
SHOWSCREEN
WEND
END
EDIT:
Hier mal das Winterspecial ....Schneeflöckchen weis röckchen ... ;)
SYSTEMPOINTER FALSE
SETSCREEN 640,480,0
TYPE star // Type erstellen
x
y
ENDTYPE
LOCAL S AS star // s ist type von star
LOCAL stars[] AS star // Array als star
WHILE TRUE
IF BOUNDS(stars[],0) < 50 AND timer < GETTIMERALL()
starX = RND(640) // Zufalls startposition x achse
S.x = starX // x achse s.x zuweisen
S.y = -10 // s.y 10 nach unten rutschen
DIMPUSH stars[], S // array erhöhen/vergrössern
timer = GETTIMERALL()+90
ENDIF
FOREACH check IN stars[]
INC check.y,RND(3)
PRINT "X", check.x, check.y
IF check.y > 480 THEN DELETE check
NEXT
PRINT BOUNDS(stars[],0),10,10
SHOWSCREEN
WEND
END
und so könnte man z.B leben in ein Spielemenu bringen(Grafiken sind provisorisch):
LIMITFPS 80
SETSCREEN 640,480,0
FILLRECT 0,0,10,10, RGB(0x00, 0x80, 0xff)
GRABSPRITE 0,0,0,10,10
BLACKSCREEN
FILLRECT 0,0,10,10, RGB(0x00, 0xff, 0x80)
GRABSPRITE 1,0,0,10,10
BLACKSCREEN
FILLRECT 0,0,10,10, RGB(0x80, 0x80, 0xff)
GRABSPRITE 2,0,0,10,10
BLACKSCREEN
TYPE star // Type erstellen
x
y
pic
ENDTYPE
LOCAL S AS star // s ist type von star
LOCAL stars[] AS star // Array als star
WHILE TRUE
IF BOUNDS(stars[],0) < 50 AND timer < GETTIMERALL()
starX = RND(640) // Zufalls startposition x achse
S.x = starX // x achse s.x zuweisen
S.y = -10 // s.y 10 nach unten rutschen
S.pic = RND(2) // Spritewert übergeben
DIMPUSH stars[], S // array erhöhen/vergrössern
timer = GETTIMERALL()+90
ENDIF
FOREACH check IN stars[]
INC check.y,RND(3)
SPRITE check.pic, SIN(check.x)*640, COS(check.y)*480
IF check.y > 480 THEN DELETE check
NEXT
PRINT BOUNDS(stars[],0),10,10
SHOWSCREEN
WEND
END
Danke Schanz0r,
genau so :)
Ich hab es zwar auch mit BOUNDS() versucht, hatte es aber falsch gesetzt.
Werde woll heut und morgen etwas mit den neuen Types in richtung Partikelengine herumspielen.
Damit sind nette Effekte möglich thx....
Nun aber nochmal zu meiner Frage:
QuoteSYSTEMPOINTER modus#
Zeigt den aktuellen System Mauspfeil an (modus#=TRUE) oder schaltet ihn ab (modus#=FALSE). Damit kann man GUIs programmieren, oder PocketPC Stifteingabe am PC durch den Mauspfeil simulieren.
Ok, muss man den Mauspfeil, denn überhaupt als "abgeschaltet" definieren??
Ist dem Prg. nicht auch klar, das keine Mauspfeil verwendet wird??
Würde mich über eine Antwort freuen.
Antidote
ne hatte ich noch drinne , damit ich die mit den mauszeiger so particles machen konnte....
(was aber in diesen Code so wie er jetz ist , nicht mehr der fall ist !)
Kann man ja weg lassen den Befehl, oder auf False setzet!
Sobald man MOUSE* Befehle verwendet, ist der Pfeil weg. Wenn man ihn trotzdem will, muss man SYSTEMPOINTER TRUE machen.