Hallo,
ich möchte mit Polyvector ein Sprite zeichnen.
Das ganze läuft über funktionen in einem Type ab.
Im Type gibt es die Variablen x% und y%, dennen wird in der Main Loop immer die koordinaten der Maus übergeben.
Aber hier scheine ich einen Denkfehler zu machen.
Unten bei dem Beispielcode werden zwar die Polyvector(en ? ) verschoben aber nicht das "innen" liegende Sprite.
// --------------------------------- //
// Project: Polytest
// Start: Tuesday, August 03, 2010
// IDE Version: 8.054
SETCURRENTDIR("Media") // seperate media and binaries?
SYSTEMPOINTER TRUE
TYPE tpol
ax1 = 0
ax2 = 0
ax3 = 0
ax4 = 0
ay1 = 0
ay2 = 0
ay3 = 0
ay4 = 0
bx1 = 0
bx2 = 0
bx3 = 0
bx4 = 0
by1 = 0
by2 = 0
by3 = 0
by4 = 0
id%
x%
y%
FUNCTION m_init_spritesize:
LOCAL l_x%,l_y%
GETSPRITESIZE self.id,l_x,l_y
self.ax3 = l_x
self.ax4 = l_x
self.bx3 = l_x
self.bx4 = l_x
self.ay2 = l_y
self.ay3 = l_y
self.by2 = l_y
self.by3 = l_y
ENDFUNCTION
FUNCTION m_draw_poly:
STARTPOLY 0,0
//POLYVECTOR self.x + self.ax1, self.y + self.ay1, self.x + self.bx1, self.y + self.by1 , RGB(0x00, 0x00, 0xff)
//POLYVECTOR self.x + self.ax2, self.y + self.ay2, self.x + self.bx2, self.y + self.by2 , RGB(0x80, 0xff, 0xff)
//POLYVECTOR self.x + self.ax3, self.y + self.ay3, self.x + self.bx3, self.y + self.by3 , RGB(0x80, 0xff, 0xff)
//POLYVECTOR self.x + self.ax4, self.y + self.ay4, self.x + self.bx4, self.y + self.by4 , RGB(0x00, 0x00, 0xff)
POLYVECTOR self.x + self.ax1, self.y + self.ay1, self.x + self.ax1, self.y + self.ay1 , RGB(0x00, 0x00, 0xff)
POLYVECTOR self.x + self.ax2, self.y + self.ay2, self.x + self.ax2, self.y + self.ay2 , RGB(0x80, 0xff, 0xff)
POLYVECTOR self.x + self.ax3, self.y + self.ay3, self.x + self.ax3, self.y + self.ay3 , RGB(0x80, 0xff, 0xff)
POLYVECTOR self.x + self.ax4, self.y + self.ay4, self.x + self.ax4, self.y + self.ay4 , RGB(0x00, 0x00, 0xff)
ENDPOLY
ENDFUNCTION
ENDTYPE
GLOBAL p AS tpol
GLOBAL mx,my,b1,b2
LOADSPRITE "icon.png",0
p.id = 0 // Sprite ID
p.m_init_spritesize() // Grösse von Polyvector an das sprite anpassen
WHILE TRUE
MOUSESTATE mx,my,b1,b2
p.m_draw_poly() // Polyvector zeichnen
// Position von der mouse übergeben
p.x = mx
p.y = my
SHOWSCREEN
WEND
(http://www.deuteriumoxid.com/glbasic/icon.png)
Vielleicht bin ich blind, es ist schon spät. Solltest du nicht das Sprite auch irgendwo in deinem Loop zeichnen? :)
Ähmm ??
Das wird doch mit der Type function m_draw_poly() gezeichnet.
Da sitzt ja das Startpoly mit drin.
Ich versteh dein Problem nicht ganz!?!
Wenn ich das Programm kompiliere, habe ich einen Hintergrund mit 6xicon.png
und mit der Maus hab ich eine Art "Fenster", wodurch ich die sehen kann, wenn ich mit dem "Fenster" hinundher schiebe...
Und was genau möchtest du jetzt anders machen? :)
Quote from: backslider on 2010-Aug-04
Ich versteh dein Problem nicht ganz!?!
Wenn ich das Programm kompiliere, habe ich einen Hintergrund mit 6xicon.png
und mit der Maus hab ich eine Art "Fenster", wodurch ich die sehen kann, wenn ich mit dem "Fenster" hinundher schiebe...
Und was genau möchtest du jetzt anders machen? :)
Genau das ist es was mich Irritiert.
Warum 6 x das Icon und warum verhalten sich die Vectoren wie ein fenster?
Ich möchte dass das Icon im Polygonfgenster "Kleben bleibt" wenn ich die Maus verschiebe. 1 Fenster mit einem Icon.png.
So wie es mit Drawsprite auch gehen würde.
DRAWSPRITE 0, mx,my
OK, Problem behoben.
Dein Fehler: Du hast sozusagen die Position deines Sprites in deinem Polyvector immer mitverschoben, dadurch krieg man auch ein paar coole effekte hin^^
Also kannst dir das mit dem ax...ay... etc sparen. Du brauchst nur die Breite und die Höhe des Sprites um den Polyvector zu zeichnen... Naja Code angucken bringt dir warscheinlich mehr als meine verwirrenden Worte xD
TYPE tpol
width%
height%
id%
x%
y%
FUNCTION m_init_spritesize:
LOCAL l_x%,l_y%
GETSPRITESIZE self.id,l_x,l_y
self.width=l_x
self.height=l_y
ENDFUNCTION
FUNCTION m_draw_poly:
STARTPOLY 0,0
POLYVECTOR self.x, self.y, 0,0 , RGB(0x00, 0x00, 0xff)//oben links
POLYVECTOR self.x, self.y + self.height, 0,self.height , RGB(0x80, 0xff, 0xff)//unten links
POLYVECTOR self.x + self.width, self.y + self.height, self.width,self.height , RGB(0x80, 0xff, 0xff)//unten rechts
POLYVECTOR self.x + self.width, self.y, self.width,0 , RGB(0x00, 0x00, 0xff)//oben rechts
ENDPOLY
ENDFUNCTION
ENDTYPE
Den Rest im Code kannste so lassen!
:nw: :booze:
Dickes Danke ,
genau so soll es sein.
Da hab ich das wohl mit den Poly's falsch verstanden.
Ich dachte das die Grafik mit verschoben werden muss, dabei reicht "nur" die grösse der Gfx und die wird dann
automatisch in das Polygon rein skalliert.
Gerngeschehen ;)
Genau, du sagst wo die Punkte des Polys liegen sollen und innerhalb dieser Punkte wird dann die angegebene Position deines Sprites relativ mitverschoben.
Verschiebst du dein Vertice (Punkt) also z.B. nach x=10 und hast gesagt, die Farbe soll auf Position (innerhalb des Polys) x=10 liegen, ist diese auf x=20.
Hoffe es ist so verständlich ;)