Author Topic: Polyvector an Maus koordinaten hängen, nur wie ???  (Read 2467 times)

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
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

 



« Last Edit: 2010-Aug-03 by D2O »
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

Offline monono

  • Mr. Polyvector
  • ***
  • Posts: 213
    • View Profile
    • Sockel Lernmedien
Vielleicht bin ich blind, es ist schon spät. Solltest du nicht das Sprite auch irgendwo in deinem Loop zeichnen?  :)

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
Ä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

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
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?  :)

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
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

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
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!
« Last Edit: 2010-Aug-04 by backslider »

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
 :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

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
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 ;)
« Last Edit: 2010-Aug-04 by backslider »