Grafik

Previous topic - Next topic

Shogun

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

Quentin

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 ;)

Shogun

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?

S.O.P.M.

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.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Shogun

Vielen Dank, werde es ausprobieren.

Schranz0r

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Shogun

Drawsprite wird nicht als möglicher Parameter angezeigt. Steht auch nicht in der Hilfe.

Schranz0r

Hast du die Aktuelle Demo geladen?
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Version 5.x oder so. Und die GRafik wird bei PONG mit DRAWRECT gemacht. Das ersetzt Du "einfach" durch DRAWSPRITE.
Hallo, ganz vergessen ;)

Shogun

Hm, habe die aktuelle Version geladen jetzt läuft das PongDemo nicht mehr.

Schranz0r

Gernot sagte es ja grade

FILLRECT mit DRAWRECT ersetzten!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Shogun

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

D2O

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"
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Kitty Hello

das Beispiel ist in der neuen Version auch nochmal in der Hilfe. Diesmal aber korrigiert (oder?)

D2O

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
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell