GLBasic forum

Other languages => GLBasic - de => Topic started by: D2O on 2010-Aug-03

Title: Polyvector an Maus koordinaten hängen, nur wie ???
Post by: D2O on 2010-Aug-03
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




(http://www.deuteriumoxid.com/glbasic/icon.png)
Title: Re: Polyvector an Maus koordinaten hängen, nur wie ???
Post by: monono on 2010-Aug-04
Vielleicht bin ich blind, es ist schon spät. Solltest du nicht das Sprite auch irgendwo in deinem Loop zeichnen?  :)
Title: Re: Polyvector an Maus koordinaten hängen, nur wie ???
Post by: D2O on 2010-Aug-04
Ähmm ??

Das wird doch mit der Type function m_draw_poly() gezeichnet.
Da sitzt ja das Startpoly mit drin.
Title: Re: Polyvector an Maus koordinaten hängen, nur wie ???
Post by: 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?  :)
Title: Re: Polyvector an Maus koordinaten hängen, nur wie ???
Post by: D2O on 2010-Aug-04
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
Title: Re: Polyvector an Maus koordinaten hängen, nur wie ???
Post by: backslider on 2010-Aug-04
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!
Title: Re: Polyvector an Maus koordinaten hängen, nur wie ???
Post by: D2O on 2010-Aug-04
 :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.

Title: Re: Polyvector an Maus koordinaten hängen, nur wie ???
Post by: backslider on 2010-Aug-04
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 ;)