Author Topic: Manga Hintergrund  (Read 3530 times)

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10758
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Manga Hintergrund
« on: 2006-Jan-04 »
Schonmal gefragt, wie man so schräge Hintergründe vorbeilaufen lassen kann - für eine Highscore-Liste z.B.?
Hier mal ein Code der geht, aber _viel_ unnötige Rechenzeit verschwendet - wen's stört, der kann's ändern.
Code: (glbasic) [Select]
// Sprite machen
FILLRECT 0,0, 150,100,RGB(40,70,220)
FILLRECT 0,0, 142,41,RGB(40,220,40)
PRINT "GLBasic", 3,3
GRABSPRITE 0, 1,1,150,46
BLACKSCREEN

// Anzeigen
WHILE TRUE
MenuBkgRot(0, 32.5, 20)
SHOWSCREEN
WEND

// Die eigentliche Funktion
FUNCTION MenuBkgRot: id, phi, speed
LOCAL dx, dy, rx, ry, bx, by, sx, sy, ox, gox
// dx,dy : Pixel für einen Block nach rechts
// rx,ry : Pixel für einen Block nach unten
// bx,by : Spritegröße - später blockzähler
// sx,sy : Bildschirmgröße
// ox : offset für aktuellen Block
// gox : globaler Offset durch Timer -> Dadurch läuft das Ding schräg
GETSPRITESIZE id, bx, by
IF bx=0 OR by=0 THEN RETURN
bx=bx+2
by=by+3
dx = COS(phi)*bx
dy = - SIN(phi)*bx
rx = SIN(phi)*by
ry =   COS(phi)*by
GETSCREENSIZE sx, sy
bx = INTEGER(sx/bx)*2
by = INTEGER(sy/by)*2
gox = MOD(-GETTIMERALL() * speed, 10000)/10000
FOR y=-by TO by
ox = MOD(y,2)/2 + gox
FOR x=-bx TO bx
ROTOSPRITE id, (x+ox)*dx+y*rx, (x+ox)*dy+y*ry, phi
NEXT
NEXT
ENDFUNCTION
Das war's auch schon wieder...
Have fun.