GLBasic forum

Other languages => GLBasic - de => Topic started by: Shogun on 2007-Sep-23

Title: Grafik
Post by: Shogun on 2007-Sep-23
Hallo alle zusammen, bevor ich hier meine erste Frage stelle, möchte ich mich kurz vorstellen. Meine Name ist Markus Bünnagel und ich bin 29 Jahre alt. Ich bin und war schon immer leidenschaftlicher Spieler. Leider habe ich keinerlei Programmier-Kenntnisse bis auf html wobei das natürlich sehr einfach ist. Ich habe die Demo seit ca. 1 Woche und träume seitdem jeden Abend davon mal ein wirklich gutes Spiel zu programmieren. Ich bin mit dem Pong Spiel angefangen. Es bietet ja schon sehr viel potential um hier und da einiges zu ändern. Ich habe ein wenig mit Farben und Hintergrund probiert und die Schläger kann ich nun auch nach vorne und hinten bewegen. Ist ja schonmal ein kleiner Erfolg. Jetzt möchte ich die Schläger in Grafiken umwandeln, komme aber irgendwie nicht weiter. Ich habe mir das Rocket Escape angeschaut. Da werden ja ganz oben die Grafikbefehle geladen. Ich verstehe nicht ganz wie da ein Bezug zu den sich bewegenden Objekten entsehen soll. Grafiken laden kann ich ja, aber es muss ja genau auf das zu bewegende Objekt und sich dann mitbewegen.
Ich bin wirklich hoch motiviert und würde mich über jede Hilfe freuen.

Gruß Markus
Title: Grafik
Post by: Quentin on 2007-Sep-23
woran genau hängt es denn?

Wenn du weißt, wie man mit dem Befehl LOADSPRITE Grafiken lädt, so kannst du diese mit dem Befehl DRAWSPRITE und den verwandten Befehlen die Grafik beliebig auf dem Bildschirm plazieren.

Oder stell dein Coding einfach mal hier rein. Das ist häufig besser, um gezielt Hilfestellung zu geben.
Nebenbei: Herzlich willkommen ;)
Title: Grafik
Post by: Shogun on 2007-Sep-23
Aber die Grafik muss sich ja mitbewegen. Ich benutze den Code von dem Pong-Spiel (siehe Hilfe-Datei). Ich möchte statt einfachen Rechtecken halt ne Grafik haben. Welche Möglichkeiten gibt es?
Title: Grafik
Post by: S.O.P.M. on 2007-Sep-23
Also so wie ich das hier auffasse, geht es einfach darum, den Schläger als Bitmap zu zeichnen. Demnach ersetzt du den RECT Befehl einfach gegen den DRAWSPRITE. Die Grafik würde sich dann natürlich auch mitbewegen, weil die Koordinaten bei DRAWSPRITE genauso angegeben werden müssen.
Title: Grafik
Post by: Shogun on 2007-Sep-23
Vielen Dank, werde es ausprobieren.
Title: Grafik
Post by: Schranz0r on 2007-Sep-23
Hi Shogun!


Also du machst es wie Folgt:

Du weist ja die Coordinaten des Schlägers:

Code (glbasic) Select
bat_x[num], bat_y[num]Diese sind ja in einer sogenannten "For-Next-Schleife" drin. Nun musst du in diese die Grafik plazieren

Beispiel:
Code (glbasic) Select
...

LOADSPRITE "Schläger.png",0  // Grafik mit 16x64 Pixel groß

...
    FOR num=0 TO 1
        DRAWSPRITE 0, bat_x[num], bat_y[num] // Schläger Zeichen
    .... // der rest vom code
    NEXT
....
Hoffe die verstehst den sinn dahinter
Title: Grafik
Post by: Shogun on 2007-Sep-23
Drawsprite wird nicht als möglicher Parameter angezeigt. Steht auch nicht in der Hilfe.
Title: Grafik
Post by: Schranz0r on 2007-Sep-23
Hast du die Aktuelle Demo geladen?
Title: Grafik
Post by: Kitty Hello on 2007-Sep-23
Version 5.x oder so. Und die GRafik wird bei PONG mit DRAWRECT gemacht. Das ersetzt Du "einfach" durch DRAWSPRITE.
Hallo, ganz vergessen ;)
Title: Grafik
Post by: Shogun on 2007-Sep-23
Hm, habe die aktuelle Version geladen jetzt läuft das PongDemo nicht mehr.
Title: Grafik
Post by: Schranz0r on 2007-Sep-23
Gernot sagte es ja grade

FILLRECT mit DRAWRECT ersetzten!
Title: Grafik
Post by: Shogun on 2007-Sep-23
Hm, irgendwas passt bei der neueren Version nocht nicht. Habe alle Fillrect Parameter mit Drawrect ersetzt. Hier der Code:
// Pong

DIM bat_y[2]
DIM bat_x[2]
DIM score[2]

// Voreinstellungen / Setup values
GOSUB Init

// Hauptschleife / Main Loop
main:
GOSUB MoveAll
GOSUB ShowAll
GOTO main



// ------------------------------------------------------------- //
// -=#  INIT  #=-
// ------------------------------------------------------------- //
SUB Init:
GOSUB ResetBall

// Spielfeld zeichnen, als Hintergrund nutzen
// Draw playfield, use as background bitmap
BLACKSCREEN
DRAWRECT 0,   0, 639, 15,  RGB(255, 255, 255)
DRAWRECT 0, 464, 639, 479, RGB(255, 255, 255)
DRAWRECT 312, 0, 327, 479, RGB(255, 255, 255)
USEASBMP

// Schläger 0 setzten / Reset Bat 0
bat_y[0]=240; bat_y[1]=240
// Schläger 1 setzten / Reset Bat 1
bat_x[0]=16; bat_x[1]=600

// Klassischer Zeichensatz / Classic Font
LOADFONT "FontBW.bmp", 0
ENDSUB // INIT

// ------------------------------------------------------------- //
// -=#  RESETBALL  #=-
// ------------------------------------------------------------- //
SUB ResetBall:
// Diese Variablen sind als LOCAL definiert:
// These variables are defined LOCAL:
// void
ball_x=320
ball_y=240

IF ball_sx<0
ball_sx=1
ELSE
ball_sx=-1
ENDIF

ball_sy=1
ENDSUB // RESETBALL


// ------------------------------------------------------------- //
// -=#  SHOWALL  #=-
// ------------------------------------------------------------- //
SUB ShowAll:
// Die Schläger anzeigen / Show the bats
FOR num=0 TO 1
DRAWRECT bat_x[num], bat_y[num], bat_x[num]+16, bat_y[num]+64, RGB(255, 255, 255)
PRINT score[num], num*320 + 32, 16
NEXT
// Der Ball / The ball
DRAWRECT ball_x, ball_y, ball_x+16, ball_y+16, RGB(255, 255, 255)
SHOWSCREEN
ENDSUB // SHOWALL


// ------------------------------------------------------------- //
// -=#  MOVEALL  #=-
// ------------------------------------------------------------- //
SUB MoveAll:
// Paddles
FOR num=0 TO 1
// Tasten / Keys:  A, Y
  IF KEY(30) THEN bat_y[0]=bat_y[0]-2
  IF KEY(44) THEN bat_y[0]=bat_y[0]+2
  // Tasten / Keys:  /\, \/
  IF KEY(200) THEN bat_y[1]=bat_y[1]-2
  IF KEY(208) THEN bat_y[1]=bat_y[1]+2
 
  // Schläger am Rand? / Bat at border?
  IF bat_y[num]<0   THEN bat_y[num]=0
  IF bat_y[num]>416 THEN bat_y[num]=416
 NEXT

// Ball
 ball_x=ball_x+ball_sx
 ball_y=ball_y+ball_sy
 
 // Ball unten am Rand / Ball at lower border
 IF ball_y>464
  ball_y=464
  ball_sy=-ball_sy
 ENDIF
 
 // Ball oben am Rand / Ball at upper border
 IF ball_y<0
  ball_y=0
  ball_sy=-ball_sy
 ENDIF
 
 // Ball Linker Rand / Ball at left border
 IF ball_x<0
  score[1]=score[1]+1
  GOSUB ResetBall
 ENDIF
 
 // Ball rechter Rand / Ball at right border
 IF ball_x>624
  score[0]=score[0]+1
  GOSUB ResetBall
 ENDIF
 
 // Pong
 FOR num=0 TO 1 // Für jeden Spieler / For each player
  // Bewegt sich der Ball auf den Schläger 'num' zu?
  // Does ball move toward bat 'num'
  IF (ball_sx<0 AND num = 0) OR (ball_sx>0 AND num=1)
   BOXCOLL col, bat_x[num], bat_y[num], 16, 64,   ball_x, ball_y, 16, 16
 
   IF col=TRUE
    // Ballgeschwindigkeit in X umdrehen / Flip ball's X-direction
    ball_sx= -ball_sx
    // Schneller machen / Speed up
    ball_sx = ball_sx * 1.2
    ball_sy = ball_sy * 1.05
   ENDIF
  ENDIF
 NEXT
 
ENDSUB // MOVEALL
Title: Grafik
Post by: D2O on 2007-Sep-24
Noch ne kleine änderung bei Drawrect gegenüber fillrect.
In Drawrect gibst Du die Positionen x,y an und dann die masse der Rects, z,b 32pixel breit und 64pixel hoch.
In fillrect hatte man die Positionen x,y und für das rect die positionen plus breite !
Also,
Code (glbasic) Select
Drawrect positionX,PositionY,RealeBreite,RealeHöhe,FarbeNoch was, damit es hier im Forum besser zu lesen ist, benutze "CODETAGS"
Markiere einfach den gesammten Code und klicke dann auf den Button "Code"
Title: Grafik
Post by: Kitty Hello on 2007-Sep-24
das Beispiel ist in der neuen Version auch nochmal in der Hilfe. Diesmal aber korrigiert (oder?)
Title: Grafik
Post by: D2O on 2007-Sep-24
Kleiner Schreibfehler:
Ansonsten gehts :)

Code (glbasic) Select
BLACKSCREEN
   DRAWRECT 0,   0, 640, 15,  RGB(255, 255, 255)
DRAWLRECT 0, 464, 640, 16, RGB(255, 255, 255)  //<<<<<<<<<<<DRAWRECT 312, 0, 16, 479, RGB(255, 255, 255)
USEASBMP
Title: Grafik
Post by: Schranz0r on 2007-Sep-24
kann ja mal vorkommen :D
Title: Grafik
Post by: Shogun on 2007-Sep-24
Ja, alles korrekt hatte gestern die neue Version nicht richtig installiert. Ich habe jetzt mein Bitmap auf dem Schlägar, vielen Dank erstmal.