Fonts / Sprites / Kollisionen / Doku

Previous topic - Next topic

Kosta

Hallo,

habe ne Frage bzgl. Fonts bzw. -handling...

ich kann ja Bilder mittels Loadfont laden,
wie muss der Aufbau sein, dass GLBasic erkennt wo welcher Buchstabe steht?

Im Detail: Habe aus dem Netz diverse Bilder runtergeladen (diverse A-Z). Jetzt geht die Aufzählung  mal waagerecht und mal senkrecht durch... Wie erkennt das GLBasic? Gibt es bestimmte feststehende Werte, in der ich die Bilder erst umwandeln muss?


P.S.  Das ist mein erster Post in dem Forum hier: da wollte ich mich gleich vorstellen:
Heisse Kosta (31), und fange jetzt erst an mich in GLBasic einzuarbeiten... bitte Rücksicht nehmen auf kommende dumme Fragen :D


Und noch ne 2. Frage bzgl. Sprites:

Wie ist das Handling mit Sprites?

1) Erzeugt man ein Bild, indem man die Figur in diversen Bewegungen darstellt (also z.B. laufen, springen, usw)? -> dann wird dem Bild eine Sprite-Nr. zugeordnet, aber wie erkennt GLBasic (bzw. wo setze ich das fest), welche Animation er nehmen soll für laufen, springen usw...
Oder mache ich aus jeder einzelnen Bewegung ein einzelnes Bild?

2) Wenn man jetzt beispielsweise mit der Figur springen will, kann das Sprite kleiner sein, als die anderen und wie funktioniert das dann mit der Kollision?

hmm..jetzt ist mir auch ne Frage bzgl. Kollisionserkennung eingefallen:

wie würde man folg. Realisieren:  
Ich möchte dass die Kollisionserkennung nur beispielsweise bei gedrückter "Feuer-Taste"  agiert, und zwar nur an einer bestimmten Stelle des Sprites.
(z.B. wenn ich eine Figur habe, und sie mittels Knopf zuschlägt, würde ich nur die Faust abfragen (ob Kollision erkannt wird))

Ich könnte hier wohl nicht mit Sprcoll arbeiten, sondern müsste Boxcoll nehmen (Spriteposition+x (armlaenge), Richtig verstanden ?

und zum Schluss noch ne Abschlussfrage:  Gibts es noch mehr Doku ausser der Standardhilfe, dem Video und das Jamaicat-Tutorial (hmm da könnte evtl. meine Frage bzgl. Animation beantwortet werden...mal reinschauen)... ?

Ciao,   man liest sich :D

Kosta
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

BumbleBee

Willkommen

Zu deiner Sprite Frage.
Mit LOADSPRITE lädst du ein Sprite mit einer Nummer.
Über diese Nummer sprichst du dein Sprite dann im Spiel an.
Wenn du mehrere Bilder (Animation) laden willst, dann machst du das so:
                       z.B. 3 Bilder einer  Laufanimation laden
           Entweder so.  Viel Schreibarbeit bei vielen Sprites
LOADSPRITE "Walk_1.bmp",1
LOADSPRITE "Walk_2.bmp",2
LOADSPRITE "Walk_3.bmp",3
         
                 oder so:  Viel einfacher                    
FOR Anim=1 TO 3  
      LOADSPRITE "Walk_" + Anim + ".bmp", Anim
NEXT
Kennst du dich schon aus mit Schleifen, Variablen...???
 
                     In der Spielschleife dann:
-------------------------------------------------------------
              //Bilder hochzählen
  INC Anim,1
              //Nach dem letzten Bild wieder Bild 1 anzeigen
  IF Anim>3 THEN Anim=1
              // Sprite mit der Zahl Anim an der Position 320,240 darstellen  
  SPRITE Anim,320,240

Welche Animation dargestellt wird, kannst du ja dann über die Tasten festlegen.
Wenn Pfeiltasten rechts-links dann Laufanimation anzeigen
Wenn Leertaste gedrückt dann Sprunganimation anzeigen
         
Man kann auch anstatt einer Nummer einen Namen vergeben.
Da hat Gernot mal was gemacht.

      http://www.glbasic.com/forum/viewtopic.php?id=177

Zu deiner Kollisions(ab)frage :)

Ja, du brauchst eigentlich nur bestimmte Koordinaten abfragen.  Boxcollision aber auch
Entfernungsbestimmung mit Hilfe des Pythagoras. (Hab ich den richtig geschrieben?):D

Hoffe ich konnte dir schon mal helfen.

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Kitty Hello

Die Bilder müssen auch als .bmp vorliegen. JPG und PNG gehen nicht.
Die Kollision würde ich (das wird ein KungFu Spiel?) mit SPROCOLL machen, aber dann halt für die Hände usw. eigene Sprites machen (evtl. nur für die Kollision)

Kosta

Hallo,


ja..wird so ne Art Kung-Fu-Spiel...

@BumbleBee: ja...schleifen/Variablen sind bekannt/Programmierung Wissen/Grundlagen sind vorhanden (im Bezug auf Spiele aber überhaupt nicht)

@Gernot: ok...eigene Sprites... hmm..  ich werde es mal versuchen ob ich damit klarkomme :)
Wie handle ich das mit der Größe des Sprites (i.d.F. der Faust/Hand): die Größe aendert sich (wenn ich springe/kicke/zuhaue), wie funktioniert da die Collisionsabfrage: Gebe ich dann die #ID im "Feuer"-Zustand an?

Irgendeine Info wg. den Fonts?
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

Kitty Hello

Ja. What you (might) see is what you check.
Der Font wird mit Menü: Tools/FontGenerator gemacht.
Der Font ist eine 16x8 Zeichen bitmap, die Breiter als hoch sein muss. Wenn du volle 256 Zeichen willst, muss der Zeichensatz 16x16 Zeichen sein und Höher als Breit.

Kosta

Hi ... 3 Fragen hätte ich noch,

1) Gibt es in GLBasic ein Scanline-Modus ?  (also so wie bei den Arcadeautomaten)...

hmmm..zur Verdeutlichung (falls unbekannt) hier ein paar Beispiele:
http://x.mame.net/german/gamescreenshots.html

2) Wenn ich ein animierten Hintergrund (bzw. nur Teile davon) haben will -> muss ich das mit einem statischen Bild (mittels loadbmp) laden und die animierten Teile über Sprites realisieren, oder gibt es noch ne andere Möglichkeit ? (eine kleinere Grafik laden, und mittels Koordinaten darstellen).

3) Wer bestimmt (bzw. wo/wie kann ich das ändern/entscheiden) welche Sprites über den anderen gelegt werden (also wenn 2 Sprites auf denselben Koordinaten liegen, welches Sprite wird überdeckt)
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

BumbleBee

Hallo Kosta

Bewegen sich die Linien eigentlich ? Weiß ich gar nicht mehr. :D
Obwohl ich solche Spiele auch gespielt hab.

Zu 1
*****

Code (glbasic) Select
LOADBMP "Background.bmp"  //Dein Bild
Color=RGB(0,0,0)         //Schwarze Linien
           
            //Bei Auflösung 640*480.
   FOR y=0 TO 480 STEP 5  // 5er Schritte
     DRAWLINE 0,y,640,y,Color
   NEXT  

 SHOWSCREEN
KEYWAIT
Zu 2
*****
Kommt vielleicht darauf an was sich alles im Hintergrund verändert. Bewegt sich nur ein
Baum, würde ich das mit einem Sprite machen als das ganz Bild zu ändern.
Außer dein Bild besteht aus Tiles dann ist das ja eh kein Problem
Vielleicht hat ja jemand einen anderen Tip.


Zu 3
*****
Es ist so wie beim Kartenspiel. Die Karte die du zuletzt auf den Stapel legst ist ja immer die oberste.
Also das zuletzt gezeichnete Sprite ist immer oben.

Wenn du das im Spiel ändern willst kannst du es ja so machen, dass du je nach
Situation das Sprite darstellst.

Zum Beispiel.

Code (glbasic) Select
IF KEY(57) //Wenn Leertaste
    SPRITE 1,320,240  //Zuerst Sprite 1
    SPRITE 2,320,240  //Dann Sprite 2
  ELSE   //Andernfalls
     SPRITE 2,320,240  //Zuerst Sprite 2
     SPRITE 1,320,240  //Dann Sprite 1
  ENDIF
So kannst du bestimmen wann welches Sprite dargestellt wird.
Ich hoffe es ist was für dich dabei. Gernot oder die anderen haben da bestimmt bessere Vorschläge.


Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Kosta

thnx,


kann man die FOR-Schleife nur mit numerischen Werten und der Zählung "TO" benutzen?

Wäre nicht schlecht, wenn es auch mit "IN" ginge       (analog for-Schleife in der Shell):

Beispiel:
   FOR x IN alpha beta gamma delta
   ...
   NEXT
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

Kitty Hello

Dafür ist es besserer Progammierstil alpha,beta,gamma,delta in ein Feld zu packen:
Code (glbasic) Select
DIM omega[4]
omega[0] = alpha
omega[1] = beta
omega[2] = gamma
omega[3] = delta

FOR i = 0 TO BOUNDS(omega[], 0)-1
   PRINT omega[i], 100, 100+i*20
NEXT