Problem bei Packman

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

rambo256

Betreff: Problem bei Packman

BeitragFr, Jan 09, 2004 23:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 10, 2004 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 10, 2004 0:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 10, 2004 0:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 10, 2004 0:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 10, 2004 0:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 10, 2004 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
aha,danke!
aber wie mach ich das mit diesen tiles?
auch in paint erstellen und dann ins level einfügen?

Travis

BeitragSa, Jan 10, 2004 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 10, 2004 0:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

rambo256

BeitragSa, Jan 10, 2004 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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?!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 10, 2004 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group