GLBasic forum

Codesnippets => Code Snippets => Topic started by: Schranz0r on 2007-Apr-06

Title: starfield mit Blinksternen ;)
Post by: Schranz0r on 2007-Apr-06
Code (glbasic) Select
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 ;)
Title: starfield mit Blinksternen ;)
Post by: Antidote on 2007-Apr-06
@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
Title: starfield mit Blinksternen ;)
Post by: D2O on 2007-Apr-06
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 ?
Title: starfield mit Blinksternen ;)
Post by: Kitty Hello on 2007-Apr-07
Lass einen Index mitlaufen, und brich ab:
Code (glbasic) Select
index=0
FOREACH blah in blahblah[]
INC index,1
IF index>50 THEN BREAK
...
NEXT
Title: starfield mit Blinksternen ;)
Post by: D2O on 2007-Apr-07
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.

Code (glbasic) Select
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
Title: starfield mit Blinksternen ;)
Post by: Schranz0r on 2007-Apr-07
So in etwar ?


Code (glbasic) Select
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 !

Code (glbasic) Select
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 ... ;)

Code (glbasic) Select
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
Title: starfield mit Blinksternen ;)
Post by: Schranz0r on 2007-Apr-07
und so könnte man z.B leben in ein Spielemenu bringen(Grafiken sind provisorisch):


Code (glbasic) Select
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
Title: starfield mit Blinksternen ;)
Post by: D2O on 2007-Apr-07
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.
Title: starfield mit Blinksternen ;)
Post by: Antidote on 2007-Apr-07
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
Title: starfield mit Blinksternen ;)
Post by: Schranz0r on 2007-Apr-07
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!
Title: starfield mit Blinksternen ;)
Post by: Kitty Hello on 2007-Apr-09
Sobald man MOUSE* Befehle verwendet, ist der Pfeil weg. Wenn man ihn trotzdem will, muss man SYSTEMPOINTER TRUE machen.