Map-Problem, warum sind begrenzungen weg?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

mavi

Betreff: Map-Problem, warum sind begrenzungen weg?

BeitragDi, Apr 28, 2009 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Smile ich habe ein Map erstellt wo außenrum jeweils das spielfeld begrenz ist nun füge ich scrolling und spieler ein => begrenzung rechts und unten fehlt.
Warum sie sind immernoch definiert!

Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()

Global hero = LoadImage("held.bmp") ;Held
MaskImage hero, 255,255,255
Global gras = LoadImage("gras.bmp") ;0
Global wasser = LoadImage("wasser.bmp");1
Global karte
Global px = 50
Global py = 50
Global tilex
Global tiley
Global scrollx
Global scrolly

Dim map(19,14)

karte = OpenFile("map.dat")
For x=0 To 19
For y=0 To 14
map(x,y) = ReadByte(karte)
Next   
Next

;hauptschleife

Repeat
Cls
drawmap()
hero()
interface()
Flip
Until KeyHit(1)
CloseFile karte


Function drawmap()
For x = 0 To 19
For y = 0 To 14
   If map(x,y) = 0 Then
      DrawImage gras, x*32-scrollx, y*32-scrolly
   EndIf
   If map(x,y) = 1 Then
      DrawImage wasser, x*32-scrollx, y*32-scrolly
   EndIf

Next
Next
End Function

Function hero()
DrawImage hero, px,py ;Held anzeigen
;=======STEUERUNG=======
If KeyDown(200) Then ;oben
If map(tilex,tiley-1) < 1 Then
py = py - 1
scrolly = scrolly - 1
EndIf
EndIf

If KeyDown(208) Then ;unten
If map(tilex,tiley+1) < 1 Then
py = py + 1
scrolly = scrolly + 1
EndIf
EndIf

If KeyDown(203) Then ;links
If map(tilex-1,tiley) < 1 Then
px = px - 1
scrollx = scrollx - 1
EndIf
EndIf

If KeyDown(205) Then ;rechts
If map(tilex+1,tiley) < 1 Then
px = px + 1
scrollx = scrollx + 1
EndIf
EndIf
;=======SPIELERBEGRENZUNG======
tilex = Floor((px+16)/32)
tiley = Floor((py+16)/32)
End Function

Function interface()
Rect 10,10, 100, 20, 0
End Function



Eine weitere Frage ist, wie kann ich eigentlich bei Tiles pixelgenaue abfrage machen? weil bei mir steht meine figur quasi mitten im feld noch und kann nicht weiter laufen ;D!?

Skabus

BeitragDi, Apr 28, 2009 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Wäre vllt. nützlich du würdest eine funktionierende Version hochladen...

Versteh dein Problem nämlich nicht ganz und hab auch keine Lust extra
Bilder da zusammenzufügen...


Ne pixelgenaue Kollisionsabfrage machst du am besten indem du dir z.B. ein unsichtbares Rechteck festlegst(ich nehme standardmäßig immer die breite der "realen Figur" und bei nem Helden immer
etwa 1/4 der Höhe, geht auch weniger, man kann auch nur ein 1x1 Pixel großes Quadrat nehmen)
und statt der Spielergrafik, dieses unsichtbare Rechteck bei der Kollisionsprüfung nimmst.

Ich nehm dafür immer ne kleine Extragrafik, die ich dann maskiere, aber man kann das sicher auch einfacher machen.


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu
  • Zuletzt bearbeitet von Skabus am Di, Apr 28, 2009 19:28, insgesamt einmal bearbeitet
 

mavi

BeitragDi, Apr 28, 2009 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ich verstehe dein deutsch nicht so ganz, willst du das ich eine version meines programms inklusive bilder uploade?


HIER wenn du es gemeint hast:D
http://rapidshare.com/files/226794126/RPG.rar.html


danke für deine mühe mir zuhelfen



Ich habe nochmal alles übersichtlich und neuumgeschrieben... aber jetzt kommt "Function not found" Woran liegts?

Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()

;- Images laden -

gras    =       LoadImage("gras.bmp")
wasser    =      LoadImage("wasser.bmp")
hero   =      LoadImage("held.bmp")
MaskImage hero, 255,255,255


;- Include -
Include "func.bb"


;- Variablen -
Global timer    =    CreateTimer(60)
Global karte   
Global px       =   10
Global py      =   7
Global move    =    1








;- Vorbereitungen laden -
Dim map(19,14)

karte = OpenFile("map.dat")


For y = 0 To 14
   For x = 0 To 19
      map(x,y) = ReadByte(karte)
   Next
Next





;- Hauptschleife :: BEGIN :: -
Repeat
drawmap()
movement()



If move = 1 Then x = px * 32: y = py * 32: DrawImage hero,x-scrollx,y-scrolly: Delay 1




WaitTimer(timer)
Flip
Cls
Until KeyHit(1):End

Code: [AUSKLAPPEN]
;// FUNC.bb
;//HIER WIRD DER FEHLER ANGEZEIGT!!!
Function drawmap()

For y = 0 To 14
   For x = 0 To 19
      If map(x,y) = 0 Then
         DrawImage gras,x*32-scrollx,y*32-scrolly
      EndIf
      
      If map(x,y) = 1 Then
         DrawImage wasser,x*32-scrollx,y*32-scrolly
      EndIf
      
   Next
Next

End Function




Function movement()

If KeyDown(208) Then
   If map(px,py+1) < 1 Then
      py       = py       +    1
      scrolly = scrolly    +    32
      move   =             1
   EndIf
EndIf

If KeyDown(200) Then
   If map(px,py-1) < 1 Then
      py      = py      -    1
      scrolly   = scrolly   -   32
      move   =            1
   EndIf
EndIf

If KeyDown(203) Then
   If map(px-1,py) < 1 Then
      px       = px      -   1
      scrollx = scrollx   -    32
      move   =            1
   EndIf
EndIf

If KeyDown(205) Then
   If map(px+1,py) < 1 Then
      px      = px      +   1
      scrollx = scrollx   +   32
      move   =             1
   EndIf
EndIf

End Function
 

Lador

BeitragDo, Apr 30, 2009 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo mavi.

Was kompilierst du denn wenn "Function not found" kommt?
Wieso sind der Code von Rapidshare und dein hier geposteter Code anders?
Wie machst du das, dass der Spieler sich 3mal so schnell bewegt wie die Kamera mitscrollt? ^^ Ich konnte den Fehler wirklich nicht finden. ^^

Willst du denn Pixel by Tile (sprich: der Spieler läuft immer genau ein Tile, egal ob stockend, also 32 Pixel auf einmal oder fließend, Beispiele sind z.B. die RPGMaker Spiele) oder Pixel by Pixel (sprich: der Spieler bewegt sich immer ein paar wenige Pixel pro Tastendruck, und je länger man auf die Taste drückt, desto mehr bewegt sich der Spieler, Beispiele hierfür sind z.B. die alten Action-Adventures auf dem SNES wie Zelda - A Link to the Past, Final Fantasy, Secret of Mana usw.) machen? Für Pixel by Pixel gibts hier ein Tutorial, was aber nicht funktioniert.

MFG Lador
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran"
Screenshot | Worklog
Fortschritt: ca. 70%

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group