Polyvector an Maus koordinaten hängen, nur wie ???

Previous topic - Next topic

D2O

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.

Code (glbasic) Select
// --------------------------------- //
// 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





I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

monono

Vielleicht bin ich blind, es ist schon spät. Solltest du nicht das Sprite auch irgendwo in deinem Loop zeichnen?  :)

D2O

Ähmm ??

Das wird doch mit der Type function m_draw_poly() gezeichnet.
Da sitzt ja das Startpoly mit drin.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

backslider

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?  :)

D2O

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.
Code (glbasic) Select
DRAWSPRITE 0, mx,my
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

backslider

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

Code (glbasic) Select
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!

D2O

 :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.

I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

backslider

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 ;)