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
Habe hier gerade leider kein GLB aber es geht glaube ich in etwa so:
winkel = ATAN(y1-y2,x1-x2)
//Dabei sind y1 und x1 die Koordinaten des Ziels, also z.B. der Maus
lg
Kann sein, dass Du y2,y1 vertauschen musst. Aber so geht's.
Danke für die Hilfe!
Mit eurer Formel hat mich das Sprite immer "von hinten" angeguckt :)
Also meine Formel lautet jetzt:
winkel = ATAN(-(y1-y2),-(x1-x2))
...Und funktioniert!
backslider
Das ist gleich ATAN(y2-y1, x2-x1)
Stimmt :good:
// 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
//___________________________________________________________________________________________________________
Ziemlich laggy, aber sehr cool! :)
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)
// 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
//___________________________________________________________________________________________________________
nice thing! :)