Problem bei Packman
Übersicht

![]() |
rambo256Betreff: Problem bei Packman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute!
Ich programmiere gerade einen packman klon,ich habe es schon geschafft die spielerfigur zu bewegen und die levels zu designen. Nun hab ich ein Problem: ich bekomme es nich hin die Spielerfigur zu stoppen,wenn er eine Wand des labyrinth's berührt,ohne das sich das prog aufhängt. Es wäre sehr nett wenn ihr eine lösung für mein Prolem findet. soweit bing ich schon: Code: [AUSKLAPPEN] links = 203 rechts = 205 hoch = 200 runter = 208 esc = 1 space = 0 x = 8 y = 6 z = 1 x1 = 50 y1 = 200 a = 1 b = 1 c = 1 d = 1 ; Menü Graphics (800,600,32,2) Cls Locate (350,280) Color 250,0,0 Print "PAC MAN - The Awakening" Locate (350,350) Print "1. Start" Locate (350,375) Print "2. Ende" Locate(0,400) eingabe$ = Input(eingabe) If eingabe = 1 Then ;Bilder laden Graphics(800,600,16,2) SetBuffer BackBuffer() Level1 = LoadImage("Level1.bmp") Spieler = LoadImage("Spieler.bmp") Spielerrechts = LoadImage("spielerrechts.bmp") Spielerlinks = LoadImage("spielerlinks.bmp") Spielerhoch = LoadImage("spielerhoch.bmp") Spielerunten = LoadImage("spielerunten.bmp") MaskImage spielerrechts, 255, 0, 255 MaskImage spielerlinks, 255, 0, 255 MaskImage spielerhoch, 255, 0, 255 MaskImage spielerunten, 255, 0, 255 ; hauptschleife Repeat Cls DrawImage level1, 0,0 If KeyDown(rechts) Then x = x + 1 z = 1 ;steuerung (rechts) If KeyDown(links) Then x = x - 1 z = 2 ;steuerung (links) If KeyDown(hoch) Then y = y - 1 z = 3 ;steuerung (hoch) If KeyDown(runter) Then y = y + 1 z = 4 ;steuerung (runter) If z = 1 Then DrawImage spielerrechts, x,y ; richtung des Spielers (rechts) If z = 2 Then DrawImage spielerlinks, x,y ; richtung des Spielers (links) If z = 3 Then DrawImage spielerhoch, x,y ; richtung des Spielers (hoch) If z = 4 Then DrawImage spielerunten, x,y ; richtung des Spielers (runter) Locate(750,50) ; X-Koordinate des Spielers Print x Locate(750,40) Print y ; y-Koordinate des Spielers Flip Until KeyHit(1) EndIf |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was genau passiert denn, wenn der Spieler eine Wand berührt? Gibt es eine spezielle Fehlermeldung?
So wie ich das sehe, hast du gar keine Kollisionsabfrage, die überprüft, ob der Spieler etwas berührt. So müßte er doch einfach durch alles hindurchlaufen. Wenn man das ganze Level als Bilddatei hat, ist es natürlich nicht ganz einfach, eine Kollisionsabfrage zu machen, da die einzelnen Wände dann ja keine Koordinaten haben. Die brauche ich aber, damit ich weiß, welche Richtung jetzt durch die Wand blockiert ist. Weiter kann ich dir leider nicht helfen, da ich bisher immer anders vorgegangen bin. Ich habe immer alle Objekte einzeln dargestellt. Dann habe ich für jede Bewegungsrichtung eine Variable die angibt, ob eine Bewegung in die entsprechende Richtung möglich ist. Diese setze ich anfangs alle auf "0" und gebe sie nur frei, wenn bestimmte Bedingungen nicht erfüllt sind (z.B. Spieler steht links von einer Wand => Bewegung nach rechts nicht möglich). Dann kann ich beim eigentlichen bewegen ganz einfach vorgehen ; Kollisionsabfrage MoveRechts = 0 If Not Spieler links neben Kiste then MoveRechts = 1 ; Spieler bewegen IF KeyDown(205) and MoveRechts = 1 then x = x + 1 Das funktioniert allerdings nur, wenn die Wände auch koordinaten haben. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
du mußt noch weitere Abfragen einbauen Beispiel if x < 0 then x= 0 if x >800 then x = 800 damit der Spieler nicht aus dem Bild verschwindet dann sind noch Fehler drin If KeyDown(rechts) Then x = x + 1 z = 1 ;steuerung (rechts) mit doppelpunkt machen If KeyDown(rechts) Then x = x + 1 : z = 1 ;steuerung (rechts) anstatt Locate und Print besser mit text 750,50,y oder text 750,50,"irgend ein text" Mit der Kollision des hintergrund wird es schon extrem schwierig da sollte man besser mit Tiles arbeiten ! |
||
[BB2D | BB3D | BB+]
|
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für deine mühe,aber ich habe auch schon eine kollisionsabfrage geschriebn. leider hab ich den fehler begangen,dass das prog sich aufhing,wenn der spieler die wand berührt.
ich habe die kollisionsabfrage geschriebn und dann a auf 0 gesetzt, dann hab ich meine schleife nur durchlaufen lassen,wenn a =1 is,aber wenn a = o is dann hängt sich alles auf =( |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
meine nachricht war an travis gerichtet !!!
aber trotzdem danke für deine hilfe rallimen, geht das arbeiten mit tiles besser und schneller als mit bitmaps erstellte level? |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
du kannst die bitmaps je nehmen , must diese nur rastern als tiles
und diese dann mit datenfeldern kombinieren, ist zwar umständlich weil die Wände ja verschoben sind und wahrscheinlich nicht dem rastemaß entsprechen , müßte dann auch noch angepasst werden! heidenmaloche Einfacher ist es so.... für ein Pacman Clon reichen ja erst mal standarttiles wie Wände und Wege um es am Laufen zu bekommen mit der Kollision dabei lernt man auf jedenfall schon einiges |
||
[BB2D | BB3D | BB+]
|
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
aha,danke!
aber wie mach ich das mit diesen tiles? auch in paint erstellen und dann ins level einfügen? |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn man seine Levels als Bitmap macht, ist man natürlich sehr flexibel und kann die Levels auf den Pixel genau so aussehen lassen, wie man will und muß sich an keine Regeln oder Blockgrößen halten.
Ich würde aber unbedingt dazu raten, mit Tiles zu arbeiten. So kann man auch bequem einen Leveleditor machen (obwohl das bei Pacman natürlich nicht sehr sinnvoll ist). Ich habe damit gute Erfahrungen gemacht. Bitmap-Levels habe ich allerding noch nie ausprobiert. Das kommt aber auch immer ganz auf das Projekt an, wie man am besten vorgeht. Für ein Pacman-Clone würde ich, wenn ich Grafiken benutze, wohl kein Einzelbitmap für's Level nehmen sondern einzelne Teile. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit Tiles auf alle Fälle besser. Zumal Du damit Grafikspeicher sparst, Maps lassen sich einfach erstellen, speichern und laden, Kollision ist einfach zu überprüfen und es ist schnell (Es wird ja alles mathematisch geprüft). Wenn die Engine einmal steht lassen sich einfach und schnell Features einbauen. Und jetzt versuch das mal mit einem Bild als Map... ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
aha,danke für eure antworten,da hätte ich nur noch eine frage:
wie mach ich das mit den tiles? erstelle ich einfach eine wand in paint (oder in andern programmen) und "male" die einfach ins level ein? und so konstruiere ich mir dann mein level? oder hab ich da was falsch verstanden?! |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
mal dir in paint eine Wand bzw. einen Block
mehr brauchst du erst mal nicht, zum anfangen reicht das schon die größe passend zur auflösung deiner Grafik einstellung wegen der matrix aber schau dir das mal an da steht schon so einiges https://www.blitzforum.de/viewtopic.php?t=113 |
||
[BB2D | BB3D | BB+]
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group