Seite 1 von 2

Zeichenbug ?

Verfasst: 25.10.2004 13:17
von Robert Wünsche
Hi @ all,

gestern abend wollte ich eine Prodcedur schreiben, die eine textur bzw. ein sprite erstellt und darauf zeichnet ...
Pustekuchen !

Hier der code:

Code: Alles auswählen

Procedure bla_blub (tex.l,wert.l) 
  calldebugger
  If CreateSprite(tex.l, wert, wert)
  Else
    ProcedureReturn 0
  EndIf
  
  If StartDrawing(SpriteOutput(tex))
    Plot(1, 1, RGB(wert.l,255,123)) 
  ELSE
    Procedurereturn 0
  ENDIF
ENDProcedure
Vorsicht, stürzt kommentarlos ab !

Ist das jetzt ein bug oder hab ich was falsch programmiert ?
Wenn es ein bug ist, kann es vermutlich nur ein speicherzugriffsfehler sein !
Danke im foraus !

Re: Zeichenbug ?

Verfasst: 25.10.2004 13:23
von freedimension
Robert Wünsche hat geschrieben:Forsicht, stürtzt komentarlos ab !
:shock: Wie kann man in so einen kurzen Satz so viele Fehler einbauen????

Verfasst: 25.10.2004 13:29
von Robert Wünsche
Indem man in deutsch nicht aufpasst :wink: !

Verfasst: 25.10.2004 14:50
von Franky

Code: Alles auswählen

Procedure bla_blub (tex.l,wert.l)
  ;CallDebugger
  If CreateSprite(tex.l, wert, wert)
  Else
    ProcedureReturn 0
  EndIf
 
  If StartDrawing(SpriteOutput(tex))
    Plot(1, 1, RGB(wert.l,255,123))
    StopDrawing()
  Else
    ProcedureReturn 0
  EndIf
EndProcedure 
Schon mal versucht, eine Hose anzuziehen, während deine Mutter sie gerade herstellt? <)
Oder einen Tee aus ner Tasse zu trinken, während dir gerade wer eingießt?(Bedenke, man trinkt keinen Tee durch nen Strohhalm)

Verfasst: 25.10.2004 15:19
von Robert Wünsche
:) Danke Franky!
Kann mir mal bitte (!) jemand erklären, warum sich der debugger an dieser stelle festfährt ?

Verfasst: 25.10.2004 16:08
von sunset
Hallo Robert,

fang doch mal mit InitSprite an, das wäre schon mal eine Verbesserung.



Frank

Verfasst: 25.10.2004 16:16
von Robert Wünsche
ja, natürlich (war ja auch nur ein codeschnipsel):

Code: Alles auswählen

initsprite()
Openscreen(1024,768,32,"test")

Procedure bla_blub (tex.l,wert.l) 
  If CreateSprite(tex.l, wert, wert) 
  Else 
    ProcedureReturn 0 
  EndIf 
  
  If StartDrawing(SpriteOutput(tex)) 
    Plot(1, 1, RGB(wert.l,255,123)) 
    StopDrawing() 
  Else 
    ProcedureReturn 0 
  EndIf 
EndProcedure

bla_blu(1,25)
Displaysprite(1,1,1)
Flipbuffers()
Delay (5000)
(nur mal so niedergeschrieben)

So, ich glaube, das problem hat sich gelöst !
Danke !

Verfasst: 26.10.2004 20:58
von Robert Wünsche
so, und wieder ein problem:

Hier der code:

Code: Alles auswählen

;linkedlist:
Structure Blend_temp
  xpos.l       ;x - position des fleckes
  ypos.l       ;y - position des fleckes

  sprite.l     ;die nummer des sprites
EndStructure
NewList Blend_temp.Blend_temp()




Procedure G_2d_blend (p_stark.l,p_trans.l) 
  If CountList(Blend_temp()) => 1
    Debug "fehler !"
    ProcedureReturn 0
  Else
  EndIf
  
  ResetList(Blend_temp())
  While NextElement(Blend_temp()) 
    sprite   = Blend_temp()\sprite
    t_xpos   = Blend_temp()\xpos
    t_ypos   = Blend_temp()\ypos
    TransformSprite3D(sprite, t_xpos -p_stark, t_ypos - p_stark, t_xpos + p_stark, t_ypos - p_stark, t_xpos + p_stark, t_ypos + p_stark, t_xpos - p_stark, t_ypos + p_stark) 
    DisplaySprite3D(sprite,0,0,p_trans)
  Wend 
  ProcedureReturn 1
EndProcedure 

;initialisierung:
If InitSprite() = 0
  Debug "Fehler ! Konnte die direktx umgebung nicht erkennen !"
  End
Else
EndIf

If InitSprite3D() = 0
  Debug "Fehler ! Konnte die direct3d nicht finden !"
  End
Else
EndIf

If OpenScreen(1024,768,32,"Blendtest ") = 0
  Debug "Fehler ! Konnte den bildschirm nicht öffnen !"
  End
Else
EndIf

Procedure.l G_2d_getblend (p_xauf.l,p_yauf.l,p_genau.l,p_sprite.l,p_rot.l,p_grun.l,p_blau.l) 
  If StartDrawing(ScreenOutput()) = 0
    Debug "error !"
    ProcedureReturn 0
  Else
    ;lese den bildschirm aus:
    xpos = 1
    ypos = 1
    p_point:
    Farbe = Point(xpos, ypos)
    rot = Red(Farbe)
    If rot = p_rot
      grun = Green(Farbe)
      If grun = p_grun
        blau = Blue(Farbe)
        If blau = p_blau
          ;setze die pixelposition in das sprite
          AddElement(Blend_temp())
          Blend_temp()\xpos = xpos
          Blend_temp()\ypos = ypos
          Blend_temp()\sprite = p_sprite
        Else
        EndIf
      Else
      EndIf
    Else
    EndIf
    
    ;setze die leseposition ein stückchen weiter:
    xpos + p_genau
    If xpos > p_xauf
      xpos = 1
      ypos + p_genau
      If ypos > p_yauf
        ;bende die routine
        Goto p_point_end
      Else
      EndIf
    Else
    EndIf
    Goto p_point
    p_point_end:
    ProcedureReturn 1
    StopDrawing()
  EndIf
EndProcedure 

;erstelle blendsprite3d:
CreateSprite(1,32,32,#PB_Sprite_Texture)
;zeichne den kreis:
If StartDrawing(SpriteOutput(1)) = 0
  Debug "Fehler !, konnte nicht auf das sprite zeichnen !"
  End
Else
  Circle(16,16,16,RGB(255,255,255))
  StopDrawing()
EndIf

If CreateSprite3D(1,1) = 0
  End
Else
EndIf

;zeichne einen roten markierungspunkt:
If StartDrawing(ScreenOutput()) = 0
  Debug "Fehler !, konnte nicht auf den bildschirm zeichnen !"
  End
Else
  Box(20,20,100,10,RGB(255,0,0))
  StopDrawing()
EndIf

nochi:
FlipBuffers()
Delay(300)

;lese den bildschirm aus:
G_2d_getblend(1023,767,3,1,255,0,0)
Delay(3000)
;zeige die sprite 3d's an:

Start3D()
G_2d_blend(10,10)
Stop3D()
FlipBuffers() 

Delay(5000)
End
Beim ausführen dieses codes komm ich zurück zu den desktop, aber der ist dann ganz verzogen, sodass ich den pc neustarten muss :( .
Wo hab ich denn fehler ?

Verfasst: 27.10.2004 01:00
von Franky
Robert, du hast erst ProcedureReturn und dann Stopdrawing() geschrieben.
Nach Procedurereturn geht das programm aber automatisch zum hauptablauf
zurück, du kommst also garnet zu StopDrawing(). ab da sollte´s der selbe bug sein.

Verfasst: 27.10.2004 14:01
von Robert Wünsche
achso ... vielen dank :D , khm, war wohl ein denkfehler !
Giebts sonnst noch irgentwelche probleme mit der spritebenutzung in proceduren ?