Sprite mit Maus mit rotieren

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Quaxi
Beiträge: 66
Registriert: 11.09.2004 12:42

Sprite mit Maus mit rotieren

Beitrag von Quaxi »

Hallo,
und zwar folgendes:
Ich hab ein Sprite das einen Pfeil darstellt. Dieses Sprite ist der Mauscursor. Soweit kein problem, nur soll dieser Pfeil immer in die richtung zeigen in welche die Maus bewegt wird.
Das müsste doch mit RotateSprite3D() zu realisieren sein, nur wüsste ich im moment nicht wie... Hat einer eine Idee?
mfg und danke im voraus!
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Hallo Quaxi, ...

ich gehe mal davon aus, dass Du die Rotation des Mauszeigers selber hinbekommst und Dein Problem eher die Bestimmung der Pfeilrichtung ist.

Die Richtung in die Du den Pfeil drehen müsstest, könntest Du u.A. dadurch bestimmen, dass Du mit Hilfe der Befehle MouseDeltaX und MouseDeltaY feststellst, in welche Richtung die Maus zuletzt bewegt wurde.

Also z.B.

MouseDeltaX > 0 und MouseDeltaY = 0 -> Maus wurde nach rechts bewegt.
MouseDeltaX < 0 und MouseDeltaY > 0 -> Maus wurde nach unten links bewegt.

Gruß, PureLust.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Quaxi
Beiträge: 66
Registriert: 11.09.2004 12:42

Beitrag von Quaxi »

Danke für deine Antwort.

Den Cursor nach oben, unten, links oder rechts zu drehen währe ja kein Problem.
Ich würde aber gerne den Cursor in die tatsächliche Richtung zeigen lassen.
Mein Problem ist das ich nicht weiss wie ich den Winkel dafür ausrechne um wieviel das Sprite gedreht wird.
sim0n
Beiträge: 131
Registriert: 12.09.2004 13:18
Kontaktdaten:

Beitrag von sim0n »

Ich hab mal kurz nen BlitzBasic Code in PB umgesetzt, kann allerdings nicht garantieren, dass dieser Code funktioniert

Code: Alles auswählen

Procedure.f atan2(y.f,x.f) 
! fld dword [esp]     ;load y 
! fld dword [esp+4]   ;load x 
! fpatan              ;get atan(y/x), put result in ST1. then pop stack to leave result in ST0 
! ftst                ;test ST0 (that's the top of stack) against zero 
! fstsw ax            ;put result of test into AX 
! sahf                ;get the FPU flags into the CPU flags 
! jae @@skip          ; if above or equal then skip the add 2*pi code 
! fldpi               ;get pi 
! fadd st1,st0        ;add pi to result 
! faddp st1,st0       ;and again, for 2pi, then pop the now unneeded pi from st0 
! @@skip: 
EndProcedure

winkel = Int((atan2(y - MouseY(), x - MouseX()) + 360)) % 360
Benutzeravatar
Quaxi
Beiträge: 66
Registriert: 11.09.2004 12:42

Beitrag von Quaxi »

winkel = Int((atan2(y - MouseY(), x - MouseX()) + 360)) % 360
Die Variable winkel ist bei mir immer 0. :cry:
Danke trozdem :allright:
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Geometrie

Beitrag von Xaby »

Tafelwerk S. 45 :mrgreen:

http://www.mathepower.com/dreieck.php

Du kennst doch sicherlich diese Augen, die immer hinter dem Zeiger her schauen
http://www.pandorabots.com/pandora/talk ... d97e345aa1

Oder gib ein www.alicebot.org und dann Chat with Alice

Also du nimmst eine feste Position P(X1|Y1)
und berechnest eine Gerade zum Punkt M(X2|Y2) ~ M steht für die Maus.

du kannst so also den Winkel mit Hilfe der oben genannten WebSeite und dem Stoff der zehnten Klasse lösen.

Wenn das klappt, lässt du deinen festen Punkt P(X1|Y1) einfach wandern und immer dahin setzen, wo deine fast neue Mausposition ist.

Du hast also eine ganz neue, die nun M(X1|Y1) ist, und eine fast neue.
Wenn die Maus nicht bewegt wird, werden M und P automatisch der selbe Punkt.
Ich wünsch dir viel Erfolg und hoffe, du schaffst es. Würde mich auch über eine Danksagung freuen :allright: Wenn du auch richtig großzügig sein möchtest, kann ich dir auch meine KontoNr. geben :allright:
Netten Gruß, Xaby
Kinder an die Macht http://scratch.mit.edu/
Antworten