Seite 2 von 2

Verfasst: 08.01.2007 13:36
von Nero
läuft bei mir garnicht, wie soll ich die dll einbinden.
Achso hab ich vergessen zu erwähnen das ding nutzt die PureXML lib
Vielleicht geht der mit Layerdepth einmal zu hoch.
Hm das sollte nicht passieren da ich
in der For ja nochmal prüfe ob da überhaupt nen tile existiert

Code: Alles auswählen

        CurrentChip = World.Map(CurrentTile)\Tile[l]         
        If CurrentChip <> 0  
das problem was ich aber immer wieder habe egal wie ich den code auch umbau ist das der Player sprite scheinbar eine höhere priorität hat die ich nicht beeinflussen kann

Code: Alles auswählen

DrawPlayer() 
DisplayTransparentSprite(6000 + CurrentChip - 1  , x_x * Gridsize_X, y_y * Gridsize_Y)  
wird in der ausgabe aber so ausgegeben als ob das im code steht

Code: Alles auswählen

DisplayTransparentSprite(6000 + CurrentChip - 1  , x_x * Gridsize_X, y_y * Gridsize_Y)  
DrawPlayer() 
Ich habe nun auch schon ausprobiert das ganze so zu machen das erst die ganze map gezeichnet wird bis zu der layerebene in der sich der player bewegen soll danach wird der zeichenvorgang abgebrochen und dann der player gezeichnet und danach erst der rest der map aber es wird der player sprite wieder über der ganzen map dargestellt.

Also ich werde heute nachmittag das ganze nochmal neu aufbauen den
irgentwas läuft da schief.

Verfasst: 08.01.2007 14:16
von dllfreak2001
Ich kann dir leider nicht weiterhelfen weil diese purexml klamotte niregends in deiner version runterladen kann.

Es gibt soweit bei den 2d-klamotten von pb keinerlei prioritäten, der Buffer gibt immer das aus was auch gemalt wurde aus. Und wenn dan der Char als letztes gemalt wurde dann muss das auch so sein.

Es muss an deiner Routine da liegen.

Verfasst: 08.01.2007 15:09
von Nero

Code: Alles auswählen

Es muss an deiner Routine da liegen.
Davon gehe ich auch aus nur ist mir schleierhaft wie der sprite über
allen anderen sein kann wen ich wie im letzten versuch es so in der art gemacht habe.

for .....
displaytransparentsprite(Map layer 1)
next
DrawPlayer() <- der player wird 100% zwischen den layern gezeichnet
for .....
displaytransparentsprite(Map layer 2)
next

Hier wird der player sprite ja nur 1x zwischen den Layern gezeichnet und ist dennoch über den Layern zu sehen :lol:

Also ich bau es nacher nochmal neu auf wen ich den Fehler finde sag ich mal bescheit woran es letztendlich lag *g*

Verfasst: 08.01.2007 15:21
von dllfreak2001
Hier mal nen zusammengepfuschter Code

Code: Alles auswählen

;***DLL-Freak´s StandartScreen***
;         *07.12.2006*
InitSprite()
InitKeyboard()

OpenScreen(1280,800,32,"StandartScreen")

#Var = 3
#Width=20
#Height=20

;-Bodentexturen erstellen
For x = 0 To #Var
CreateSprite(x,32,32)
StartDrawing(SpriteOutput(x))
  Box(0,0,32,32,RGB(20,140,20))
  For n = 0 To 2000
    grn = Random(255)
    rt = Random(grn/1.5)
    bl = Random(grn/2)
    Line(Random(31),Random(31),0,Random(2),RGB(rt,grn,bl))
  Next
StopDrawing()
Next

;-Bodenlayer zuordnen
Dim flr(#Width,#Height)

For x = 0 To #Width:For y = 0 To #Height
  flr(x,y) = Random(#Var)
Next:Next

;-Ein Layer erzeugen
CreateSprite(#Var + 1,32,32)
StartDrawing(SpriteOutput(#Var + 1))

    For x = 0 To 8
      Line(x*4,0,0,32,RGB(255,0,0))
      Line(0,x*4,32,0,RGB(255,0,0))
    Next

StopDrawing()
TransparentSpriteColor(#Var + 1,0)
;-Layermap zuordnen
Dim lyr(#Width,#Height)
For x = 0 To #Width:For y = 0 To #Height
  lyr(x,y) = Random(1)
Next:Next

;-Char erzeugen
CreateSprite(#Var + 2,32,64)
StartDrawing(SpriteOutput(#Var + 2))
  Box(8,16,16,48,RGB(255,255,0))
  Box(8,32,16,6,RGB(255,0,0))
  Circle(15,12,12,RGB(180,100,10))
StopDrawing()
TransparentSpriteColor(#Var + 2,0)


Repeat
  ExamineKeyboard()

    ;-Karte scrollen
    If KeyboardPushed(#PB_Key_W)
      vy - 5
    ElseIf KeyboardPushed(#PB_Key_S)
      vy + 5
    EndIf
    If KeyboardPushed(#PB_Key_A)
      vx - 5
    ElseIf KeyboardPushed(#PB_Key_D)
      vx + 5
    EndIf
    
    ;-Spieler bewegen
    If KeyboardReleased(#PB_Key_Up)
      If pposy > 0 
        pposy - 1
      EndIf
    ElseIf KeyboardReleased(#PB_Key_Down)
      If pposy < #Height
        pposy + 1
      EndIf  
    EndIf
    
    If KeyboardReleased(#PB_Key_Left)
      If pposx > 0
        pposx - 1
      EndIf
    ElseIf KeyboardReleased(#PB_Key_Right)
      If pposx < #Width
        pposx + 1
      EndIf  
    EndIf

    ;-Bodentexturen darstellen
    For x = 0 To #Width:For y = 0 To #Height
      DisplaySprite(flr(x,y),x*32-vx,y*32-vy)
    Next:Next

    ;-Layer und Char darstellen
    For x = 0 To #Width:For y = 0 To #Height
      
      If x = pposx And y = pposy
        DisplayTransparentSprite(#Var + 2,pposx*32-vx,pposy*32-vy-32) ;Char darstellen
      EndIf
      
      If lyr(x,y)
        DisplayTransparentSprite(#Var + 1,x*32-vx,y*32-vy) ; Layer darstellen
      EndIf
        
    Next:Next

  ;-Bildschirm zeichnen und löschen
  FlipBuffers()
  ClearScreen(0)
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
Bei mir funzt der Code oben perfekt.

Verfasst: 08.01.2007 16:30
von Nero
Jup der geht auch bei mir perfect
wie geasagt ich vermute auch das der fehler irgentwo an meiner rotiene
liegen muß nur bissher hab ich ihn nicht gefunden. :oops:

Verfasst: 08.01.2007 18:21
von Nero
Problem gelöst :mrgreen:

Das problem an der ganzen sache war folgendes ich habe
die map gezeichnet feld für feld ist ja so auch in ordnung nur habe dabei auch gleich für dieses feld die layer gezeichnet und nicht erst das ganze map für einen Layer dargestellt :lol:

Naja einfaches umstellen der For Schleifen hat dann zum richtigen ergebnis geführt *g*