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 !

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

!
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

, khm, war wohl ein denkfehler !
Giebts sonnst noch irgentwelche probleme mit der spritebenutzung in proceduren ?