starfield mit Blinksternen ;)

Previous topic - Next topic

Schranz0r

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 ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Antidote

@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
PC Core2Duo e4300, 2GBRam, Geforce 8800GT-1gb, XPsp3
GP2x, Wii, XBox360, Wiz, psp, ps3 usw.

D2O

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 ?
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Kitty Hello

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

D2O

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
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Schranz0r

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Schranz0r

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

D2O

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.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Antidote

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
PC Core2Duo e4300, 2GBRam, Geforce 8800GT-1gb, XPsp3
GP2x, Wii, XBox360, Wiz, psp, ps3 usw.

Schranz0r

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!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Sobald man MOUSE* Befehle verwendet, ist der Pfeil weg. Wenn man ihn trotzdem will, muss man SYSTEMPOINTER TRUE machen.