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
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 ;)
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?
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.
Vielen Dank, werde es ausprobieren.
Hi Shogun!
Also du machst es wie Folgt:
Du weist ja die Coordinaten des Schlägers:
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:
...
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
Drawsprite wird nicht als möglicher Parameter angezeigt. Steht auch nicht in der Hilfe.
Hast du die Aktuelle Demo geladen?
Version 5.x oder so. Und die GRafik wird bei PONG mit DRAWRECT gemacht. Das ersetzt Du "einfach" durch DRAWSPRITE.
Hallo, ganz vergessen ;)
Hm, habe die aktuelle Version geladen jetzt läuft das PongDemo nicht mehr.
Gernot sagte es ja grade
FILLRECT mit DRAWRECT ersetzten!
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
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,
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"
das Beispiel ist in der neuen Version auch nochmal in der Hilfe. Diesmal aber korrigiert (oder?)
Kleiner Schreibfehler:
Ansonsten gehts :)
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
kann ja mal vorkommen :D
Ja, alles korrekt hatte gestern die neue Version nicht richtig installiert. Ich habe jetzt mein Bitmap auf dem Schlägar, vielen Dank erstmal.