Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

11.2: Kollisionskontrolle mit Alphakanal

Uploader:Redakteurnemored
Datum/Zeit:29.10.2011 00:52:09
Hinweis: Dieser Quelltext ist Bestandteil des Projekts OpenBook: 2D-Spieleprogrammierung, zu dem es auf FreeBASIC-Portal.de eine Projektseite gibt.

' *** CODE 11.2: Kollisionskontrolle mit Alphakanal

SCREENRES 400, 50, 32
PAINT (0, 0), 0               ' Hintergrund durchsichtig setzen
DIM AS INTEGER sx = 50        ' Startposition der Figur
DIM AS STRING taste           ' zur spaeteren Tastaturabfrage

' Figur in einen Puffer zeichnen; zweiter Puffer zur Hintergrundspeicherung
DIM AS ANY PTR figur, hintergrund
DIM AS UINTEGER farbe = &hFF907010          ' Farbe der Figur
figur       = IMAGECREATE(30, 50, 0)        ' durchsichtiger Hintergrund
hintergrund = IMAGECREATE(30, 50)
CIRCLE figur, (15, 5), 5, farbe,,,, F       ' Kopf
LINE figur, (15, 10)-(15, 40), farbe        ' Rumpf
LINE figur, ( 0, 10)-(15, 20), farbe        ' Arme
LINE figur,         -(29, 10), farbe
LINE figur, ( 0, 49)-(15, 40), farbe        ' Beine
LINE figur,         -(29, 49), farbe

' Objekte zeichnen
LINE (100, 5)-(150, 49), &h006080F0, BF     ' Alphawert 00: Hintergrund
LINE (200, 5)-(250, 49), &hFF6080F0, BF     ' Alphawert FF: Vordergrund
LINE (300, 5)-(350, 49), &h7F6080F0, BF     ' Alphawert 7F: Hindernis
LINE (0, 5)-(5, 49), &h7F6080F0, BF         ' linke Wand zur Begrenzung

GET (sx, 0)-STEP(29, 49), hintergrund
PUT (sx, 0), figur, ALPHA
PUT (sx, 0), hintergrund, ALPHA
DO
  taste = INKEY
  IF taste = CHR(255, 75) AND _             ' Pfeiltaste links
           (POINT(sx-1, 20) AND &hFF000000) <> &h7F000000 THEN
    PUT (sx, 0), hintergrund, PSET          ' Hintergrund wiederherstellen
    sx -= 1                                 ' Bewegung nach links
    GET (sx, 0)-STEP(29, 49), hintergrund   ' neuen Hintergrund speichern
    PUT (sx, 0), figur, ALPHA               ' Figur zeichnen
    PUT (sx, 0), hintergrund, ALPHA         ' Hintergrund darueber zeichnen
   ELSEIF taste = CHR(255, 77) AND _         ' Pfeiltaste rechts
           (POINT(sx+30, 20) AND &hFF000000) <> &h7F000000 THEN
    PUT (sx, 0), hintergrund, PSET          ' Hintergrund wiederherstellen
    sx += 1                                 ' Bewegung nach rechts
    GET (sx, 0)-STEP(29, 49), hintergrund   ' neuen Hintergrund speichern
    PUT (sx, 0), figur, ALPHA               ' Figur zeichnen
    PUT (sx, 0), hintergrund, ALPHA         ' Hintergrund darueber zeichnen
  END IF
  SLEEP 10
LOOP UNTIL taste = CHR(27)