Seite 1 von 6

Gitternetz im Spiel (unterteilen)

Verfasst: 29.05.2005 01:53
von Rubiko
es kann sein das die lösung ziemlich einfach ist, nur fällt es mir nicht ein...

wie unterteile ich das gesamte "spielfeld" in einen gitter wo jedes 50 px breit und hoch ist?

Verfasst: 29.05.2005 02:31
von Deeem2031
In etwa so?

Code: Alles auswählen

#Screen_Width = 800
#Screen_Height = 600

InitSprite()
InitKeyboard()
OpenScreen(#Screen_Width,#Screen_Height,32,"")
Repeat
  
  ClearScreen(0,0,0)
  StartDrawing(ScreenOutput())
  For x = 0 To #Screen_Width-1 Step 50+1
    LineXY(x,0,x,#Screen_Height,255)
  Next
  For y = 0 To #Screen_Height-1 Step 50+1
    LineXY(0,y,#Screen_Width,y,255)
  Next
  StopDrawing()
  FlipBuffers()
  
  ExamineKeyboard()
  If KeyboardReleased(#PB_Key_Escape)
    quit = 1
  EndIf
Until quit
50+1 weil die Linie ja auch ein Pixel breit ist und sonst ein Pixel von dem Feld einnehmen würde.

Verfasst: 29.05.2005 02:43
von Rubiko
naja das ist ja schonmal ein anfang... aber die linien sollen unsichzbar da sein!
das heißt ich will zum beispiel das ich nur so angeben muss in welche richtung zum beispiel ein zauber schießt
also

Code: Alles auswählen

;1 = spieler 2 = zauber
0.0.0.0.0.0.0.0.0
0.0.0.2.2.2.0.0.0
0.0.0.0.2.0.0.0.0
0.0.0.0.1.0.0.0.0
0.0.0.0.0.0.0.0.0
0.0.0.0.0.0.0.0.0
0.0.0.0.0.0.0.0.0
wobei jede 0 für ein gitter kästchen gilt, so kann ich dann gut arbeiten

Verfasst: 31.05.2005 08:43
von Dostej
naja, dann musst Du dein Spielgitter nur berechnen. Du nimmst die x udn y position und teilst sie je durch 50. Dann hast Du die koordinaten von deinem Feld. Also, wenn die x/Y pos 120/54 ist, dann bist DU auf Feld 2/1.
Das ist eigentlich alles. Umgekehrt rechnest Du das ganze wieder *50 + 25 (Feldmitte) So kannst Du SChüsse ins nächste FEld plazieren.

Verfasst: 31.05.2005 17:09
von Ynnus
Nicht zu vergessen, wenn du durch 50 teils, dann in einen integer wandeln (immer abrunden). Dann erhälst du den linken oberen Punkt des Kästchens der Koordinaten.

BTW: Sowas braucht man allgemein bei Tile-Basierten Spielen immer mal wieder. ;)

Verfasst: 09.06.2005 06:04
von Rubiko
EDIT: (besser oben sagen als unten)
ich hab jetzt im code mal die gesamte kamera (bei der spielfigur) entfernt. jetzt versteht man (vielleicht) besser was ich mein, es soll ungefähr so sein:
(nein denkt jetzt bitte nicht ich will nur das ihr für mich tut... und so ich danke euch :allright: )
egal wie schnell der spieler ist, er bewegt sich immer einen Tile in die richtung in die er sich bewegen will... immer nur einen, und die kamera geht genauso einen tile nach vorne

EDIT2: rechtschreibfehler... war übermüdet...
----------------------------------------------


so... sorry, dass ich den alten thread hochhole...
das prinzip ist mir klar, jetzt hab ichs verkauft, aber mir ist nicht so ganz klar welche X und Y positionen?

ich kann ja mal als beispiel den jetzigen code posten... sorry für die unordentlichkeit darin, und bitte sagt nichts über die 50 - 70 zeilen code mit displaytransparent... also die map eben...
ich werde alles noch ändern

ambesten mit kommentaren zeigen... dann weiß ichs wie ichs in zukunft machen muss...
wär wirklich nett wenns jemand macht, bitte ^^

Code: Alles auswählen

; ==========================================================
; |\        /|            |          |
; | \      / |            |    /\    |
; |  \    /  |            |   /  \   |
; |   \  /   |            |  /    \  |
; |    \/    |            | /      \ |
; |          | ages and   |/        \| arriors 
; ==========================================================

If InitSprite() = 0 : MessageRequester("","Sprites could not be initialised. DirectX 7 or higher is needed!") : EndIf
If InitKeyboard() = 0 : MessageRequester("","Keyboard could not be initialised. DirectX 7 or higher is needed!") : EndIf
If InitMouse() = 0 : MessageRequester("","Mouse could not be initialised. DirectX 7 or higher is needed!") : EndIf  
  
UseJPEGImageDecoder() : UsePNGImageDecoder() : UsePNGImageEncoder()


playerX.f = 320.0 -kameraX
playerY.f = 220.0 -kameraY
playerspeed.f = -1.5

kameraX.l = playerspeed
kameraY.l = playerspeed

TastaturObenRechts.l = 0


Procedure.l FPS()  
    Shared Zeit, Frames, Ausgabe  
    If ElapsedMilliseconds() < Zeit + 1000  
        Frames + 1  
    Else  
        Ausgabe = Frames  
        Frames  = 0  
        Zeit    = ElapsedMilliseconds()  
    EndIf  
    If Ausgabe > 0  
        ProcedureReturn Ausgabe  
    Else  
      ProcedureReturn 60  
    EndIf
    
EndProcedure  


Enumeration
  ;window
  #window_1
  #window_2
  ; Sprites
  #Sprite_Interface
  #Sprite_cursor
  ; warrior01
  #Sprite_WarriorAnimLaufenVonHinten01
  #Sprite_WarriorAnimLaufenVonHinten02
  #Sprite_WarriorAnimLaufenVonHinten03
  #Sprite_WarriorAnimLaufenVonHinten04
  #Sprite_WarriorAnimLaufenVonHinten05
  #Sprite_WarriorAnimLaufenVonHinten06
  
  #Sprite_WarriorAnimLaufenVonRechts01
  #Sprite_WarriorAnimLaufenVonRechts02
  #Sprite_WarriorAnimLaufenVonRechts03
  #Sprite_WarriorAnimLaufenVonRechts04
  #Sprite_WarriorAnimLaufenVonRechts05
  #Sprite_WarriorAnimLaufenVonRechts06
  
  #Sprite_WarriorAnimLaufenVonLinks01
  #Sprite_WarriorAnimLaufenVonLinks02
  #Sprite_WarriorAnimLaufenVonLinks03
  #Sprite_WarriorAnimLaufenVonLinks04
  #Sprite_WarriorAnimLaufenVonLinks05
  #Sprite_WarriorAnimLaufenVonLinks06
  
  #Sprite_WarriorAnimLaufenVonVorne01
  #Sprite_WarriorAnimLaufenVonVorne02
  #Sprite_WarriorAnimLaufenVonVorne03
  #Sprite_WarriorAnimLaufenVonVorne04
  #Sprite_WarriorAnimLaufenVonVorne05
  #Sprite_WarriorAnimLaufenVonVorne06
  
  ; Msgbox
  #Msgbox
  ; Screenshot
  
  #Sprite_Screenshot1
  
  ; Umgebung
  
  #Tile_Grass01
  #Tile_GrassSand01
  #Tile_GrasSsand02
  #Tile_Water01
  #Tile_SandWater02
  #Tile_Sandeckenordwest
  
  #Sprite_Baum01
EndEnumeration 



; char allgemein
HP.l
AP.l
PROFESSION.l
EXP.l
Level.l


Level = 1
If Level = 1 And PROFESSION = Knight
  HP = 50
  AP = 5
EndIf
If Level = Level + 1 And PROFESSION = Knight
  HP + 15
  AP + 5
EndIf



; Mage 01
;schritt
WarriorSchauRichtung.l
WarriorSchauRichtung = 1
SchrittVorneWarrior01.l = #Sprite_WarriorAnimLaufenVonHinten01
SchrittVorneWarrior02.l = #Sprite_WarriorAnimLaufenVonHinten02
SchrittVorneWarrior03.l = #Sprite_WarriorAnimLaufenVonHinten03
SchrittVorneWarrior04.l = #Sprite_WarriorAnimLaufenVonHinten04
SchrittVorneWarrior05.l = #Sprite_WarriorAnimLaufenVonHinten05
SchrittVorneWarrior06.l = #Sprite_WarriorAnimLaufenVonHinten06
AnimWarriorVonHintenSchritt.l = SchrittVorneWarrior01

SchrittRechtsWarrior01.l = #Sprite_WarriorAnimLaufenVonRechts01
SchrittRechtsWarrior02.l = #Sprite_WarriorAnimLaufenVonRechts02
SchrittRechtsWarrior03.l = #Sprite_WarriorAnimLaufenVonRechts03
SchrittRechtsWarrior04.l = #Sprite_WarriorAnimLaufenVonRechts04
SchrittRechtsWarrior05.l = #Sprite_WarriorAnimLaufenVonRechts05
SchrittRechtsWarrior06.l = #Sprite_WarriorAnimLaufenVonRechts06
AnimWarriorVonRechtsSchritt.l = SchrittRechtsWarrior01

SchrittLinksWarrior01.l = #Sprite_WarriorAnimLaufenVonLinks01
SchrittLinksWarrior02.l = #Sprite_WarriorAnimLaufenVonLinks02
SchrittLinksWarrior03.l = #Sprite_WarriorAnimLaufenVonLinks03
SchrittLinksWarrior04.l = #Sprite_WarriorAnimLaufenVonLinks04
SchrittLinksWarrior05.l = #Sprite_WarriorAnimLaufenVonLinks05
SchrittLinksWarrior06.l = #Sprite_WarriorAnimLaufenVonLinks06
AnimWarriorVonLinksSchritt.l = SchrittLinksWarrior01

SchrittHintenWarrior01.l = #Sprite_WarriorAnimLaufenVonVorne01
SchrittHintenWarrior02.l = #Sprite_WarriorAnimLaufenVonVorne02
SchrittHintenWarrior03.l = #Sprite_WarriorAnimLaufenVonVorne03
SchrittHintenWarrior04.l = #Sprite_WarriorAnimLaufenVonVorne04
SchrittHintenWarrior05.l = #Sprite_WarriorAnimLaufenVonVorne05
SchrittHintenWarrior06.l = #Sprite_WarriorAnimLaufenVonVorne06
AnimWarriorVonVorneSchritt.l = SchrittHintenWarrior01

; SystemVariablen
msPerFrame.l = 80
ActTimer = ElapsedMilliseconds() + msPerFrame
Posi.l = 1 ; Variable, es wird abgefragt ob sich der Spieler
           ; im Interface, oder im eigentlichen game ist.
           ; 1 = Interface 2 = Game

msgbox.l = 2 ; und nochwas: es wird abgefragt ob sich eine msgbox im screen befindet,
             ; 1 = nein ; 2 = ja
; ----------------
Structure items
  X.w
  y.w
EndStructure
NewList items.items()
AddElement(items())

items()\X = 10

windowed.l
OpenConsole()
PrintN("Windowed(w) or fullscreen(f)?")
antwort.s = Input() : If antwort = "w" : windowed = #True : EndIf : If antwort = "f" : windowed = #False : EndIf
CloseConsole()


If windowed = #True
  OpenWindow(#window_1,0,0,640,480,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_BorderLess | #PB_Window_ScreenCentered, "Mage of Fear")
  OpenWindowedScreen(WindowID(),0,0,640,480,0,0,0)
  UseWindow(#window_1)
EndIf

If windowed = #False
  OpenScreen(640,480,16,"Mages And Warriors")
EndIf
  
  ;- face gecatche
  CatchSprite(#Sprite_Interface, ?Introface)
  CatchSprite(#Sprite_cursor, ?cursor)
  ;Zur Übersichtlichkeit, der cursor gleich hiermit drin
  TransparentSpriteColor(#Sprite_cursor,255,0,255)
  ; -------------------------
  
  
  ; Sprite Gecatche

  CatchSprite(#Sprite_WarriorAnimLaufenVonHinten01, ?Sprite_WarriorAnimLaufenVonHinten01)
  CatchSprite(#Sprite_WarriorAnimLaufenVonHinten02, ?Sprite_WarriorAnimLaufenVonHinten02)
  CatchSprite(#Sprite_WarriorAnimLaufenVonHinten03, ?Sprite_WarriorAnimLaufenVonHinten03)
  CatchSprite(#Sprite_WarriorAnimLaufenVonHinten04, ?Sprite_WarriorAnimLaufenVonHinten04)
  CatchSprite(#Sprite_WarriorAnimLaufenVonHinten05, ?Sprite_WarriorAnimLaufenVonHinten05)
  CatchSprite(#Sprite_WarriorAnimLaufenVonHinten06, ?Sprite_WarriorAnimLaufenVonHinten06)

  CatchSprite(#Sprite_WarriorAnimLaufenVonRechts01, ?Sprite_WarriorAnimLaufenVonRechts01)
  CatchSprite(#Sprite_WarriorAnimLaufenVonRechts02, ?Sprite_WarriorAnimLaufenVonRechts02)
  CatchSprite(#Sprite_WarriorAnimLaufenVonRechts03, ?Sprite_WarriorAnimLaufenVonRechts03)
  CatchSprite(#Sprite_WarriorAnimLaufenVonRechts04, ?Sprite_WarriorAnimLaufenVonRechts04)
  CatchSprite(#Sprite_WarriorAnimLaufenVonRechts05, ?Sprite_WarriorAnimLaufenVonRechts05)
  CatchSprite(#Sprite_WarriorAnimLaufenVonRechts06, ?Sprite_WarriorAnimLaufenVonRechts06)

  CatchSprite(#Sprite_WarriorAnimLaufenVonLinks01, ?Sprite_WarriorAnimLaufenVonLinks01)
  CatchSprite(#Sprite_WarriorAnimLaufenVonLinks02, ?Sprite_WarriorAnimLaufenVonLinks02)
  CatchSprite(#Sprite_WarriorAnimLaufenVonLinks03, ?Sprite_WarriorAnimLaufenVonLinks03)
  CatchSprite(#Sprite_WarriorAnimLaufenVonLinks04, ?Sprite_WarriorAnimLaufenVonLinks04)
  CatchSprite(#Sprite_WarriorAnimLaufenVonLinks05, ?Sprite_WarriorAnimLaufenVonLinks05)
  CatchSprite(#Sprite_WarriorAnimLaufenVonLinks06, ?Sprite_WarriorAnimLaufenVonLinks06)

  CatchSprite(#Sprite_WarriorAnimLaufenVonVorne01, ?Sprite_WarriorAnimLaufenVonVorne01)
  CatchSprite(#Sprite_WarriorAnimLaufenVonVorne02, ?Sprite_WarriorAnimLaufenVonVorne02)
  CatchSprite(#Sprite_WarriorAnimLaufenVonVorne03, ?Sprite_WarriorAnimLaufenVonVorne03)
  CatchSprite(#Sprite_WarriorAnimLaufenVonVorne04, ?Sprite_WarriorAnimLaufenVonVorne04)
  CatchSprite(#Sprite_WarriorAnimLaufenVonVorne05, ?Sprite_WarriorAnimLaufenVonVorne05)
  CatchSprite(#Sprite_WarriorAnimLaufenVonVorne06, ?Sprite_WarriorAnimLaufenVonVorne06)
  
  ;Tile Gecatche
  CatchSprite(#Tile_Grass01, ?Tile_Grass01)
  CatchSprite(#Tile_GrassSand01, ?Tile_GrassSand01)
  CatchSprite(#Tile_GrasSsand02, ?Tile_GrassSand02)
  CatchSprite(#Tile_Water01, ?Tile_Water01)
  CatchSprite(#Tile_SandWater02, ?Tile_Sandwater02)
  CatchSprite(#Tile_Sandeckenordwest, ?Tile_Sandeckenordwest)
  ; Sprite 
  CatchSprite(#Sprite_Baum01, ?Sprite_Baum01)
  CatchSprite(#Msgbox, ?MsgBox1)
  

  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonHinten01,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonHinten02,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonHinten03,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonHinten04,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonHinten05,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonHinten06,255,0,255)

  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonRechts01,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonRechts02,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonRechts03,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonRechts04,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonRechts05,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonRechts06,255,0,255)

  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonLinks01,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonLinks02,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonLinks03,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonLinks04,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonLinks05,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonLinks06,255,0,255)

  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonVorne01,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonVorne02,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonVorne03,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonVorne04,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonVorne05,255,0,255)
  TransparentSpriteColor(#Sprite_WarriorAnimLaufenVonVorne06,255,0,255)
  
  TransparentSpriteColor(#Sprite_Baum01,255,0,255)
; interface

  
; Main
  MouseLocate(240,180)
  Repeat
  ExamineKeyboard()  
  ;-interface  
  If Posi = 1
    ExamineMouse()
    MausX = MouseX()
    MausY = MouseY()
    DisplaySprite(#Sprite_Interface,60,20)
    DisplayTransparentSprite(#Sprite_cursor,MausX,MausY)
    If KeyboardPushed(#PB_Key_S)
      Posi = 2
    EndIf
  EndIf

  
  If Posi = 2

  ClearScreen(0,255,200)
  FPS()
  

  If windowed = #True : StartDrawing(WindowOutput()) : EndIf
  If windowed = #False : StartDrawing(ScreenOutput()) : EndIf
  
  DrawingMode(1)
  FrontColor(255,255,255)
  Locate(10,10)
  DrawText("HP: "+ Str(HP)) 
  Locate(70,10)
  DrawText("FPS: "+Str(Ausgabe)) 
  Locate(10,30)
  DrawText("AP: "+Str(AP))
  Locate(10,50)
  DrawText("Lvl: "+Str(Level))
  Locate(10,70)
  DrawText("Exp: "+Str(EXP))
  StopDrawing()

; Section 1
  DisplaySprite(#Tile_Grass01, 0-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 50-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 100-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 150-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 200-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 250-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 300-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 350-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 400-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 450-kameraX,0-kameraY)
  DisplaySprite(#Tile_Grass01, 0-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 50-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 100-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 150-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 200-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 250-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 300-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 350-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 400-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 450-kameraX,50-kameraY)
  DisplaySprite(#Tile_Grass01, 0-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 50-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 100-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 150-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 200-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 250-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 300-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 350-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 400-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 450-kameraX,100-kameraY)
  DisplaySprite(#Tile_Grass01, 0-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 50-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 100-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 150-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 200-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 250-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 300-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 350-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 400-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 450-kameraX,150-kameraY)
  DisplaySprite(#Tile_Grass01, 0-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 50-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 100-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 150-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 200-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 250-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 300-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 350-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 400-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 450-kameraX,200-kameraY)
  DisplaySprite(#Tile_Grass01, 0-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 50-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 100-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 150-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 200-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 250-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 300-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 350-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 400-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 450-kameraX,250-kameraY)
  DisplaySprite(#Tile_Grass01, 0-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 50-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 100-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 150-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 200-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 250-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 300-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 350-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 400-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 450-kameraX,300-kameraY)
  DisplaySprite(#Tile_Grass01, 0-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 50-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 100-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 150-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 200-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 250-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 300-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 350-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 400-kameraX,350-kameraY)
  DisplaySprite(#Tile_Grass01, 450-kameraX,350-kameraY)
  
  DisplaySprite(#Tile_GrassSand01,0-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,50-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,100-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,150-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,200-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,250-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,300-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,350-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,400-kameraX,-50-kameraY)
  DisplaySprite(#Tile_GrassSand01,450-kameraX,-50-kameraY)
  
  DisplaySprite(#Tile_GrasSsand02,-50-kameraX,-0-kameraY)
  DisplaySprite(#Tile_GrasSsand02,-50-kameraX,50-kameraY)
  DisplaySprite(#Tile_GrasSsand02,-50-kameraX,100-kameraY)
  DisplaySprite(#Tile_GrasSsand02,-50-kameraX,150-kameraY)
  DisplaySprite(#Tile_GrasSsand02,-50-kameraX,200-kameraY)
  DisplaySprite(#Tile_GrasSsand02,-50-kameraX,250-kameraY)
  DisplaySprite(#Tile_GrasSsand02,-50-kameraX,300-kameraY)
  DisplaySprite(#Tile_GrasSsand02,-50-kameraX,350-kameraY)
  
  ;SandWater Küstenlinie
    DisplaySprite(#Tile_SandWater02,-50-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,0-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,50-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,100-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,150-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,200-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,250-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,300-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,350-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,400-kameraX,-100-kameraY)
  DisplaySprite(#Tile_SandWater02,450-kameraX,-100-kameraY)
   ; ---------------------
  
  ;150er Wasserlinie
  DisplaySprite(#Tile_Water01,-50-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,0-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,50-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,100-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,150-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,200-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,250-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,300-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,350-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,400-kameraX,-150-kameraY)
  DisplaySprite(#Tile_Water01,450-kameraX,-150-kameraY)
  ; ------------------
  ;200er Wasserlinie
  DisplaySprite(#Tile_Water01,-50-kameraX,-200-kameraY)
  DisplaySprite(#Tile_Water01,0-kameraX,-200-kameraY)
  DisplaySprite(#Tile_Water01,50-kameraX,-200-kameraY)
  DisplaySprite(#Tile_Water01,100-kameraX,-200-kameraY)
  DisplaySprite(#Tile_Water01,150-kameraX,-200-kameraY)
  DisplaySprite(#Tile_Water01,200-kameraX,-200-kameraY)
  DisplaySprite(#Tile_Water01,250-kameraX,-200-kameraY)
  DisplaySprite(#Tile_Water01,300-kameraX,-200-kameraY)
  ; -----------------
  
 ; -----------------
  
  DisplaySprite(#Tile_Sandeckenordwest,-50-kameraX,-50-kameraY)

  
  DisplayTransparentSprite(#Sprite_Baum01, 450-kameraX,250-kameraY)
; End section 1 ------------------------------------------------------------------   


  

  If WarriorSchauRichtung = 1
    DisplayTransparentSprite(AnimWarriorVonHintenSchritt,playerX,playerY)
  EndIf
  If WarriorSchauRichtung = 2
    DisplayTransparentSprite(AnimWarriorVonRechtsSchritt,playerX,playerY)
  EndIf
  If WarriorSchauRichtung = 3
    DisplayTransparentSprite(AnimWarriorVonVorneSchritt,playerX,playerY)
  EndIf
  If WarriorSchauRichtung = 4
    DisplayTransparentSprite(AnimWarriorVonLinksSchritt,playerX,playerY)
  EndIf 

  If KeyboardPushed(#PB_Key_Right) And KeyboardPushed(#PB_Key_Up) = 0 And KeyboardPushed(#PB_Key_Left) = 0 And KeyboardPushed(#PB_Key_Down) = 0
    WarriorSchauRichtung = 2
    AnimWarriorVonRechtsSchritt + 1
    If AnimWarriorVonRechtsSchritt > SchrittRechtsWarrior06
      AnimWarriorVonRechtsSchritt = SchrittRechtsWarrior01
    EndIf
    playerX - playerspeed
  EndIf
  If KeyboardPushed(#PB_Key_Up) And KeyboardPushed(#PB_Key_Right)= 0 And KeyboardPushed(#PB_Key_Left) = 0 And KeyboardPushed(#PB_Key_Down) = 0
    WarriorSchauRichtung = 1
    AnimWarriorVonHintenSchritt + 1
    If AnimWarriorVonHintenSchritt > SchrittVorneWarrior06
      AnimWarriorVonHintenSchritt = SchrittVorneWarrior01
    EndIf
    playerY + playerspeed

  EndIf
  If KeyboardPushed(#PB_Key_Down) And KeyboardPushed(#PB_Key_Up) = 0 And KeyboardPushed(#PB_Key_Left) = 0 And KeyboardPushed(#PB_Key_Right) = 0
    WarriorSchauRichtung = 3
    AnimWarriorVonVorneSchritt + 1
    If AnimWarriorVonVorneSchritt > SchrittHintenWarrior06
      AnimWarriorVonVorneSchritt = SchrittHintenWarrior01
    EndIf
  playerY - playerspeed

  EndIf

  If KeyboardPushed(#PB_Key_Left) And KeyboardPushed(#PB_Key_Up) = 0 And KeyboardPushed(#PB_Key_Right) = 0 And KeyboardPushed(#PB_Key_Down) = 0
    WarriorSchauRichtung = 4
    AnimWarriorVonLinksSchritt + 1
    If AnimWarriorVonLinksSchritt > SchrittLinksWarrior06
      AnimWarriorVonLinksSchritt = SchrittLinksWarrior01
    EndIf
    playerX + playerspeed

  EndIf
  
  If EXP>=500
    Level + 1
  EndIf

    If KeyboardPushed(#PB_Key_Return)
      msgbox = 1
    EndIf
  EndIf
  
  ;- Blockierungen

  ; ----------------
  
  If KeyboardPushed(#PB_Key_F12)
    GrabSprite(#Sprite_Screenshot1,0,0,500,400)
    SaveSprite(#Sprite_Screenshot1,"Screeni1.png")
  EndIf

Repeat: Delay(1) : Until ElapsedMilliseconds() > ActTimer
ActTimer + msPerFrame

FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)
End


; Sprite Sprungmarken
DataSection
cursor: IncludeBinary "GFX\cursor.png"

Sprite_WarriorAnimLaufenVonHinten01: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonHinten01.png"
Sprite_WarriorAnimLaufenVonHinten02: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonHinten02.png"
Sprite_WarriorAnimLaufenVonHinten03: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonHinten03.png"
Sprite_WarriorAnimLaufenVonHinten04: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonHinten04.png"
Sprite_WarriorAnimLaufenVonHinten05: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonHinten05.png"
Sprite_WarriorAnimLaufenVonHinten06: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonHinten06.png"

Sprite_WarriorAnimLaufenVonRechts01: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonRechts01.png"
Sprite_WarriorAnimLaufenVonRechts02: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonRechts02.png"
Sprite_WarriorAnimLaufenVonRechts03: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonRechts03.png"
Sprite_WarriorAnimLaufenVonRechts04: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonRechts04.png"
Sprite_WarriorAnimLaufenVonRechts05: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonRechts05.png"
Sprite_WarriorAnimLaufenVonRechts06: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonRechts06.png"

Sprite_WarriorAnimLaufenVonLinks01: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonLinks01.png"
Sprite_WarriorAnimLaufenVonLinks02: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonLinks02.png"
Sprite_WarriorAnimLaufenVonLinks03: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonLinks03.png"
Sprite_WarriorAnimLaufenVonLinks04: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonLinks04.png"
Sprite_WarriorAnimLaufenVonLinks05: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonLinks05.png"
Sprite_WarriorAnimLaufenVonLinks06: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonLinks06.png"

Sprite_WarriorAnimLaufenVonVorne01: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonVorne01.png"
Sprite_WarriorAnimLaufenVonVorne02: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonVorne02.png"
Sprite_WarriorAnimLaufenVonVorne03: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonVorne03.png"
Sprite_WarriorAnimLaufenVonVorne04: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonVorne04.png"
Sprite_WarriorAnimLaufenVonVorne05: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonVorne05.png"
Sprite_WarriorAnimLaufenVonVorne06: IncludeBinary "GFX\Warrior01\WarriorAnimLaufenVonVorne06.png"

; Sprites

Sprite_Baum01: IncludeBinary "GFX\Sprites\Baum01.png"
; Tiles
Tile_Grass01: IncludeBinary "GFX\Tiles\5.png"
Tile_GrassSand01: IncludeBinary "GFX\Tiles\1.png"
Tile_GrassSand02: IncludeBinary "GFX\Tiles\2.png"
Tile_Water01: IncludeBinary "GFX\Tiles\12.png"
Tile_Sandwater02: IncludeBinary "GFX\Tiles\12.png"
Tile_Sandeckenordwest: IncludeBinary "GFX\Tiles\8.png"
;Messagebox
MsgBox1: IncludeBinary "GFX\Messagebox.jpg"
;interface
Introface: IncludeBinary "GFX\Interface.jpg"
EndDataSection

Verfasst: 12.06.2005 14:12
von Rubiko
hat keiner ne ahnung? oder wenigstens einen link wo genau geklärt ist wie man eine tilemap aufbaut, und die x und y teilt...
dürfen sogar CPP beispiele sein...

Verfasst: 12.06.2005 14:50
von Ynnus
Also für ein Tilebasiertes Spiel machst du was falsch an der Sache. Am besten du suchst dir erstmal ein Map-Format in dem du deine Karten speicherst.

Etwa sowas:

Code: Alles auswählen

100010001
100010001
100010001
111111111
100010001
100010001
100010001
Jede Ziffer steht nun für eine Grafik, welche an dieser Stelle platziert wird.
Also ließt du die Karte ein und wertest von rechts oben nach links unten aus. Bei 0,0 auf dem Bildschrim kommt dann Grafik 1, dann 0, 0,0,1,0,0,0,1... und das für alle Tiles (Die Position auf dem Bildschirm immer um 50 Pixel weiter nach rechts bzw. nach unten.

Dann hast du auch nur eine For-Schleife und nicht etliche Zeilen von DisplaySprite-Befehlen.

Ich hab zur Zeit nur ein CPP-Programm da, hier mal ein kleiner Ausschnitt wie man die Tiles anzeigen könnte:

Code: Alles auswählen

    for (int z = 0; z<=0; ++z)
    {
        for (int x = 0; x<32; ++x)
        {
            for (int y = 0; y<24; ++y)
            {
                mapdata[x][y][z].draw( x, y, 0);
            }
        }
    }
Die Karte ist also in ein dreidimensionales Array geteilt. (x,y,z) stehen dabei für x und y und z für die Layer, also mehrere Ebenen möglich. Draw ruft dabei eine Methode auf die die Tiles anzeigt. Dann wird nun also jedes der Tiles im Array durchlaufen und angezeigt.

Noch ein kleines Beispiel aus einem Map-Editor von mir. So kann man erfahren, welches Tile derzeit von der Maus angeklickt wurde:

Code: Alles auswählen

            int temp_x = (mouse.pos_x) / 32.0f;          //Mapposition where to place the tile
            int temp_y = (mouse.pos_y) / 32.0f;          //Mapposition where to place the tile
            mapinfo.set_tile((temp_x), (temp_y), -1, -1, mouse.status);
Es wird also die Mauskoordinate auf dem Bildschirm / 32 gerechnet, dann in integer gewandelt, schon hat man die Koordinate des Tiles, auf dem die Maus sich befindet. (Ist natürlich übertragbar auch auf Spielfiguren oder jede andere Koordinate.) / 32 deshalb, weil meine Tiles 32 Pixel groß sind. Bei dir müsste es / 50 sein.

So, nur irgendwo stellt sich mir die Frage, wo du da Probleme hast, das zu verstehen. Bzw was genau du nicht verstehst. Ist imo recht einfach, so ein Tilebasiertes Spielfeld. Meld dich einfach nochmal wenn du konkret ne Frage hast.

EDIT: Was deine Richtung mit dem Zauber betrifft, sag einfach welche Richtung er haben soll (x = 0, y = -1), addiere diese Werte immer auf die Position des Zaubers drauf, dann bewegt er sich hoch. Bei x = 1 und y = 0 bewegt er sich dann etwa zur Zeite rechts usw... Also dadurch kannst du dann deine Zauber, Objekte und sonstwas bewegen und Richtungen angeben.

Wichtig ist imo, dass man sein Spielfeld in ein Array unterteilt, 2 dimensional mindestens, wenn man mehrere Ebenen haben will auch 3 dimensional. (x, y) oder (x, y, z).

Verfasst: 12.06.2005 15:03
von Rubiko
also das problem dabei ist die zuweisung der grafiken an die jeweilige ID...
das mit der maus position habe ich verstanden, und auch das einlesen der map...und eben dann das darstellen
die lösung ist womöglich ziemlich einfach nur hab ich im moment nicht wirklich einen so klaren kopf...

Verfasst: 12.06.2005 15:16
von Kaeru Gaman
lade die tiles doch einfach in die sprites nummer 1000+ID

und in dem array hast du dann die ID

und im displaysprite dann logischerweise wieder 1000+ID


schau auch mal in LadyBug, das Labyrinth is auch mit tiles gemacht...