GLBasic forum

Other languages => GLBasic - de => Topic started by: backslider on 2010-Jun-30

Title: Sprite nach Maus ausrichten
Post by: backslider on 2010-Jun-30
Ich hätte da gerne mal ein Problem :P

Ich möchte gerne mein Sprite an meiner Maus ausrichten.
Als Beispiel würde z.B. ein Männchen dienen, was immer zur Maus guckt oder sowas^^

Wie berechne ich sowas? o.O
Ich gehe davon aus, dass SIN und/oder COS dabei helfen würde, nur fällt mir nichts ein und im Forum finde ich nichts passendes.

Ich gehe davon aus, jemand von euch hat ne Ahnung :)

Backslider
Title: Re: Sprite nach Maus ausrichten
Post by: monono on 2010-Jul-01
Habe hier gerade leider kein GLB aber es geht glaube ich in etwa so:

Code (glbasic) Select

winkel =  ATAN(y1-y2,x1-x2)
//Dabei sind y1 und x1 die Koordinaten des Ziels, also z.B. der Maus



lg
Title: Re: Sprite nach Maus ausrichten
Post by: Kitty Hello on 2010-Jul-01
Kann sein, dass Du y2,y1 vertauschen musst. Aber so geht's.
Title: Re: Sprite nach Maus ausrichten
Post by: backslider on 2010-Jul-01
Danke für die Hilfe!
Mit eurer Formel hat mich das Sprite immer "von hinten" angeguckt  :)

Also meine Formel lautet jetzt:

Code (glbasic) Select
winkel = ATAN(-(y1-y2),-(x1-x2))

...Und funktioniert!

backslider
Title: Re: Sprite nach Maus ausrichten
Post by: Kitty Hello on 2010-Jul-01
Das ist gleich ATAN(y2-y1, x2-x1)
Title: Re: Sprite nach Maus ausrichten
Post by: backslider on 2010-Jul-01
Stimmt  :good:
Title: Re: Sprite nach Maus ausrichten
Post by: com_1 on 2010-Jul-02
Code (glbasic) Select

// screen
GETSCREENSIZE scrx,scry;

kl1=1; kl2=2;
DIM px[kl1][kl2];DIM py[kl1][kl2];
DIM r[kl1][kl2];
DIM x[kl1][kl2];DIM y[kl1][kl2];
DIM dn[kl1][kl2];
DIM dpx[kl1][kl2];DIM dpy[kl1][kl2];
DIM dr[kl1][kl2];
DIM dx[kl1][kl2];DIM dy[kl1][kl2];
DIM xx[kl1][kl2];DIM yy[kl1][kl2];

i=2; i2=50; i3=10;
c=(250/5); c1=(c*1); c2=(c*1); c3=(c*2);
c=250;

FOR d1=0 TO kl1-1; FOR d2=0 TO kl2-1;

IF    d2=0; px[d1][d2]=(scrx/2)+i2+i3;ELSE; px[d1][d2]=(scrx/2)-i2-i3;ENDIF;

py[d1][d2]=(scry/2);

dr[d1][d2]=20;

NEXT; NEXT;


//___________________________________________________________________________________________________________
WHILE 1

// mouse
MOUSESTATE mx,my,mbl,mbr;


FOR d1=0 TO kl1-1; FOR d2=0 TO kl2-1;

r[d1][d2]=SQR(((mx-px[d1][d2])*(mx-px[d1][d2]))+((my-py[d1][d2])*(my-py[d1][d2])));

FOR d3=0 TO 361-0;

x[d1][d2]=px[d1][d2]+(r[d1][d2]*SIN(d3));
y[d1][d2]=py[d1][d2]-(r[d1][d2]*COS(d3));

IF mx>x[d1][d2]-i AND my>y[d1][d2]-i AND mx<x[d1][d2]+i AND my<y[d1][d2]+i; dn[d1][d2]=d3;ENDIF;

dpx[d1][d2]=px[d1][d2]+((r[d1][d2]/18)*SIN(dn[d1][d2]));
dpy[d1][d2]=py[d1][d2]-((r[d1][d2]/18)*COS(dn[d1][d2]));

dx[d1][d2]=dpx[d1][d2]+(dr[d1][d2]*SIN(d3));
dy[d1][d2]=dpy[d1][d2]-(dr[d1][d2]*COS(d3));

//SETPIXEL x[d1][d2],y[d1][d2],RGB(c,c,c);
DRAWLINE dpx[d1][d2],dpy[d1][d2],dx[d1][d2],dy[d1][d2],RGB(c1,c2,c3);
SETPIXEL dx[d1][d2],dy[d1][d2],RGB(c,c,c);

xx[d1][d2]=px[d1][d2]+(i2*SIN(d3));
yy[d1][d2]=py[d1][d2]-(i2*COS(d3));

SETPIXEL xx[d1][d2],yy[d1][d2],RGB(c,c,c);

NEXT;

NEXT; NEXT;


PRINT "Move your mouse",10,10;

SHOWSCREEN; WEND
//___________________________________________________________________________________________________________
Title: Re: Sprite nach Maus ausrichten
Post by: backslider on 2010-Jul-02
Ziemlich laggy, aber sehr cool! :)
Title: Re: Sprite nach Maus ausrichten
Post by: Kitty Hello on 2010-Jul-02
use POLYVECTOR instead of SETPIXEL for the circle.
http://www.glbasic.com/forum/index.php?topic=4498.msg33660 (http://www.glbasic.com/forum/index.php?topic=4498.msg33660)
Title: Re: Sprite nach Maus ausrichten
Post by: com_1 on 2010-Jul-02
Code (glbasic) Select

// screen
GETSCREENSIZE scrx,scry;

// mouse
SYSTEMPOINTER 1;


ipx=100; ipy=100; ir=20;
//c=(250/5); c1=(c*1); c2=(c*1); c3=(c*1);

FOR d=0 TO 361-0;

ix=ipx+(ir*SIN(d)); iy=ipy-(ir*COS(d));

//DRAWLINE ipx,ipy,ix,iy,RGB(c1,c2,c3);
c=(250/3); SETPIXEL ix,iy,RGB(c,c,c);

NEXT;

GRABSPRITE 1,ipx-(ir/1),ipy-(ir/1),(ir*2),(ir*2);
GETSPRITESIZE 1,spsx1,spsy1;


ipx=100; ipy=100; ir=5;
c=(250/5); c1=(c*1); c2=(c*1); c3=(c*2);

FOR d=0 TO 361-0;

ix=ipx+(ir*SIN(d)); iy=ipy-(ir*COS(d));

DRAWLINE ipx,ipy,ix,iy,RGB(c1,c2,c3);
c=250; SETPIXEL ix,iy,RGB(c,c,c);

NEXT;

GRABSPRITE 2,ipx-(ir/1),ipy-(ir/1),(ir*2),(ir*2);
GETSPRITESIZE 2,spsx2,spsy2;


kl1=108; kl2=2;
DIM px[kl1][kl2];DIM py[kl1][kl2];
DIM r[kl1][kl2];
DIM x[kl1][kl2];DIM y[kl1][kl2];
DIM dn[kl1][kl2];
DIM dpx[kl1][kl2];DIM dpy[kl1][kl2];
DIM dr[kl1][kl2];
DIM dx[kl1][kl2];DIM dy[kl1][kl2];
DIM t[kl1][kl2];
DIM ran[kl1][kl2];
DIM st[kl1][kl2];

i=5; i2=5; i3=2;
c=(250/5); c1=(c*1); c2=(c*1); c3=(c*2);
c=250;
a=12-1; b=a;

FOR d1=0 TO kl1-1; FOR d2=0 TO kl2-1;

IF    d2=0; px[d1][d2]=(40+dvx)+i2+i3;ELSE; px[d1][d2]=(40+dvx)-i2-i3;ENDIF;

py[d1][d2]=(40+dvy);

dr[d1][d2]=20;

NEXT;

dvx=dvx+50; IF d1=b; b=b+a+1; dvx=0; dvy=dvy+50;ENDIF;

NEXT;


//___________________________________________________________________________________________________________
WHILE 1

// mouse
MOUSESTATE mx,my,mbl,mbr;


FOR d1=0 TO kl1-1; FOR d2=0 TO kl2-1;

IF d2=0;
DRAWSPRITE 1,px[d1][d2]-(spsx1/2)-((i2+i3)/1),py[d1][d2]-(spsy1/2);
ENDIF;

NEXT; NEXT


FOR d1=0 TO kl1-1; FOR d2=0 TO kl2-1;

r[d1][d2]=SQR(((mx-px[d1][d2])*(mx-px[d1][d2]))+((my-py[d1][d2])*(my-py[d1][d2])));

FOR d3=0 TO 361-0;

x[d1][d2]=px[d1][d2]+(r[d1][d2]*SIN(d3));
y[d1][d2]=py[d1][d2]-(r[d1][d2]*COS(d3));

IF mx>x[d1][d2]-i AND my>y[d1][d2]-i AND mx<x[d1][d2]+i AND my<y[d1][d2]+i; dn[d1][d2]=d3;ENDIF;

//SETPIXEL x[d1][d2],y[d1][d2],RGB(c,c,c);

NEXT;

dpx[d1][d2]=px[d1][d2]+((r[d1][d2]/58)*SIN(dn[d1][d2]));
dpy[d1][d2]=py[d1][d2]+20-((r[d1][d2]/58)*COS(dn[d1][d2]));

dx[d1][d2]=dpx[d1][d2]+(dr[d1][d2]*SIN(d3));
dy[d1][d2]=dpy[d1][d2]-(dr[d1][d2]*COS(d3));

IF     st[d1][d2]=0;
IF d2=0; ran[d1][d2]=RND(2500);ELSE; ran[d1][d2]=ran[d1][d2-1];ENDIF;
IF ran[d1][d2]=0; st[d1][d2]=1;ENDIF;
ELSEIF st[d1][d2]=1;
IF t[d1][d2]<3; t[d1][d2]=t[d1][d2]+1;ELSE; t[d1][d2]=0; st[d1][d2]=0;ENDIF;
ENDIF;

IF     st[d1][d2]=0 OR st[d1][d2]=2;
DRAWSPRITE 2,dx[d1][d2]-(spsx2/2),dy[d1][d2]-(spsy2/2);
ENDIF;

NEXT; NEXT;


PRINT "Move your mouse",10,10;

SHOWSCREEN; WEND
//___________________________________________________________________________________________________________

Title: Re: Sprite nach Maus ausrichten
Post by: backslider on 2010-Jul-02
nice thing! :)