Author Topic: Für Anfänger: Zwei Spieler mit Animation  (Read 2524 times)

Offline thomasp

  • Mc. Print
  • *
  • Posts: 14
    • View Profile
Hi, bin absoluter GLBASIC-Neuling, nachfolgend das erste kleine Programm, vielleicht hilft es ja dem einen oder anderen bei seinen ersten Schritten. Insbesondere um zu verstehen:

- wie ein Hintergrundbild geladen wird

- wie (Sprite)Bilder geladen und wieder abgerufen werden

- dass man sich um die Darstellung der Einzelbilder einer Animation selbst kümmern muss

- wie Tastaturabfragen funktionieren

- wie einfache Kollisionsabfragen funktionieren (SPRCOLL)

- wie man Bildabfolgen in der Hauptschleife verlangsamen kann

Das kann man womöglich in GLBASIC komprimierter hinkriegen, aber jedes Feedback sehr willkommen. Und wie bei Backrezepten: ein paar Zutaten müsst Ihr mitbringen, insbesondere Graphiken. Das Programm ist auf eine Bildschirmgröße von 320 x 240 Pixel angelegt, also bitte ein entsprechendes Hintergrundbild mit dem Namen "kann-sonstwie-heissen.bmp" (siehe ganz unten im Code) in das Projektverzeichnis.

Dann die "Ninja"-Sprites: die Bilder für Spieler 1 in das Unterverzeichnis /spieler1/ und die für Spieler 2 in, logisch, /spieler2/. Die Bildfolgen heissen attack-e-0.bmp bis attack-e-12.bmp und running-e-0.bmp bis running-e-7.bmp. Entsprechend bei Spieler 2: attack-w-0.bmp bis attack-w-12.bmp und running-w-0.bmp bis running-w-7.bmp.

Diese Bilder müsst ihr nicht selber malen (hab ich auch nicht), die gibt es hier (mit leicht anderen Namen - und schön rosa anmalen, GLBASIC mag pinke Hintergründe für die Transparenz): http://reinerstileset.4players.de/humansD.html

Und jetzt endlich der Code:

Code: GLBasic [Select]
// --------------------------------- //
// Project: Ninja
// Start: Sunday, November 18, 2007
// IDE Version: 5.055


GOSUB init
verlangsamer = 5
        WHILE TRUE
                GOSUB spieler
                GOSUB anim
                GOSUB drawall
                SHOWSCREEN
        WEND
END

SUB anim:
DEC verlangsamer, 1
IF verlangsamer = 0
        INC spieler1anim,1
        IF spieler1anim=8
                spieler1anim = 0
        ENDIF
        IF spieler1anim=22
                 IF SPRCOLL (spieler1anim, spieler1posx, spieler1posy, spieler2anim, spieler2posx, spieler2posy)
                        INC spieler1punkte,50
                ENDIF
                spieler1anim = 0
        ENDIF
        INC spieler2anim,1
        IF spieler2anim=38
                spieler2anim = 30
        ENDIF
        IF spieler2anim=52
                IF SPRCOLL (spieler1anim, spieler1posx, spieler1posy, spieler2anim, spieler2posx, spieler2posy)
                        INC spieler2punkte,50
                ENDIF
                spieler2anim = 30
        ENDIF
verlangsamer = 5
ENDIF
ENDSUB

SUB drawall:
        DRAWSPRITE spieler1anim, spieler1posx, spieler1posy
        DRAWSPRITE spieler2anim, spieler2posx, spieler2posy
        PRINT spieler1punkte, 10,10
        PRINT spieler2punkte, 50,10
ENDSUB


SUB spieler:
        IF (KEY(45)=1)
                INC spieler1posx,laufen
                IF spieler1posx>255
                        spieler1posx = 255
                ENDIF
        ENDIF
        IF (KEY(44)=1)
                DEC spieler1posx,laufen
                IF spieler1posx < -35
                        spieler1posx = -35
                ENDIF
        ENDIF
        IF (KEY(205)=1)
                INC spieler2posx,laufen
                IF spieler2posx>260
                        spieler2posx = 260
                ENDIF
        ENDIF
        IF (KEY(203)=1)
                DEC spieler2posx,laufen
                IF spieler2posx < -35
                        spieler2posx = -35
                ENDIF
        ENDIF
        IF (KEY(46)=1) AND (spieler1anim<10)
                spieler1anim = 10
        ENDIF
        IF (KEY(208)=1) AND (spieler2anim<40)
                spieler2anim = 40
        ENDIF

ENDSUB

SUB init:
LOCAL i
// Globals
laufen = 2
rennen = 4
// Spieler 1 (von links nach rechts)
spieler1anim = 0
spieler1posx = 10
spieler1posy = 150
spieler1punkte = 0
spieler2punkte = 0
// Spieler1 läuft
FOR i=0 TO 7
        LOADSPRITE "spieler1/running-e-"+i+".bmp", 0+i  // Spieler1 läuft mit Basis-ID: 0
NEXT
// Spieler1 greift an
FOR i=0 TO 12
        LOADSPRITE "spieler1/attack-e-"+i+".bmp", 10+i  // Spieler1 greift an mit Basis-ID: 10
NEXT
// Spieler 2
spieler2anim = 30
spieler2posx = 250
spieler2posy = 150
// Spieler2 läuft
FOR i=0 TO 7
        LOADSPRITE "spieler2/running-w-"+i+".bmp", 30+i  // Spieler2 läuft mit Basis-ID: 30
NEXT
// Spieler2 greift an
FOR i=0 TO 12
        LOADSPRITE "spieler2/attack-w-"+i+".bmp", 40+i  // Spieler2 greift an mit Basis-ID: 40
NEXT
// Hintergrundbild
LOADBMP "kann-sonstwie-heissen.bmp"  // lädt ein bild und verwendet es als Hintergrund
//
ENDSUB
Die Tasten: Y,X,C und <-, V, ->

Viel Spaß damit!

Patrick

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5024
  • O Rly?
    • View Profile
Für Anfänger: Zwei Spieler mit Animation
« Reply #1 on: 2007-Dec-01 »
Zu umständlich meines erachtens, und ich würde Funktionen schreiben um den Spieler zu zeichen.

Function DrawPlayer: Startbild, Endbild, Standbild, AnimationSpeed

Verlangsamen der Animation macht man am besten mit :

Code: GLBasic [Select]
IF Timer<GETTIMERALL()
    //Zeiche ein Bild
    Timer = GETTIMERALL()+AnimationSpeed // in Millisekunden
ENDIF
Und die Transparenz könnte man selber setzen, wenns auch nicht Pink wäre:

SETTRANSPARENCY RGB_Farbe

Aber für den einstieg doch schonmal gut geworden, auch wenns nicht wirklich ins Tutorialsforum reingehört!

Deshalb move to Codeschnipsel!
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10715
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Für Anfänger: Zwei Spieler mit Animation
« Reply #2 on: 2007-Dec-01 »
Wow nehmt ihr viel Arbeit ab. Danke Schranzor!

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5024
  • O Rly?
    • View Profile
Für Anfänger: Zwei Spieler mit Animation
« Reply #3 on: 2007-Dec-01 »
;) ist mein Job Gernot

Siehe über meinen Avatar ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard