Sprite nach Maus ausrichten

Previous topic - Next topic

backslider

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

monono

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

Kitty Hello

Kann sein, dass Du y2,y1 vertauschen musst. Aber so geht's.

backslider

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

Kitty Hello

Das ist gleich ATAN(y2-y1, x2-x1)

backslider


com_1

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
//___________________________________________________________________________________________________________

backslider

Ziemlich laggy, aber sehr cool! :)

Kitty Hello


com_1

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
//___________________________________________________________________________________________________________


backslider