Zur Maus hin

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

f L i P

Betreff: Zur Maus hin

BeitragFr, Jun 10, 2005 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich hatte vor ein Zuma Deluxe - ähnliches Spiel zu proggen. Jedoch hab ich schon innerhalb der ersten 5 Minuten aufhören müssen, denn das Wichtigste an dem Spiel ist dass es ein Bild geben soll was sich immer zum Mauszeiger richten soll, ich weiß nicht welchen Befehl ich benutzen muss, höchstwahrscheinlich ATan2, aber diesen Befehl hab ich noch nie vollständig begriffen.

Meine Frage: Wie realisiert man so etwas ?

MfG fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!
  • Zuletzt bearbeitet von f L i P am Fr, Jun 10, 2005 19:02, insgesamt einmal bearbeitet

Devils Child

BeitragFr, Jun 10, 2005 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn der mauszeiger immer in der mitte ist, dan rotateimage image, atan2(mousex(), mousey()) Wink
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

frigi

BeitragFr, Jun 10, 2005 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst mit ATan2() die Position von Figur und Maus verrechnen. Wie genau habe ich jetzt nicht im Kopf, aber mit etwas Probieren kommt man da schnell drauf.
Zu Rotateimage: Berechne die Bilder besser vorher schon. In Echtzeit ist das abnormal langsam.

EDIT: ATan2(mx-px,py-my)...denke ich
frigi.designdevil.de

Devils Child

BeitragFr, Jun 10, 2005 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn der mauszeiger nit in der mitte ist muss man halt addieren oder subtrahieren. das beispiel in der cammand reference zeigt dir alllllles Wink
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN
 

f L i P

Betreff: Danke ...

BeitragFr, Jun 10, 2005 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal Danke für die Antworten, haben mir schon weitergeholfen, zumindest soweit das ich ne Drehung hinbekommen habe, jedoch nicht die die ich will, der Ursprung scheint falsch zu sein, und ob die Maus was mit dem Ziel zu tun hat weiß ich auch nicht, werde jetzt mal meinen kleinen Code posten und hoffe dass sich jemand die Mühe macht ihn soweit zu modifizieren dass er läuft, als Bild kann alles benutzt werden, meine Maße sind 100*100.

BlitzBasic: [AUSKLAPPEN]
AppTitle \"\"
Graphics 400,300,32,0
SetBuffer BackBuffer()

Z01=LoadImage(\"01.png\")

While Not KeyHit(1)
Cls
MX=MouseX()
MY=MouseY()
PX=GraphicsWidth()/2-ImageWidth(Z01)/2
PY=GraphicsHeight()/2-ImageHeight(Z01)/2
AutoMidHandle True
DrawImage Z01,PX,PY
RotateImage Z01,A
AutoMidHandle False
A=ATan2(MX-PX,PY-MY)
Flip
Wend
End


MfG fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!

Ctuchik

BeitragFr, Jun 10, 2005 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Du benutzt AutoMidHandle falsch!
Das brauchst du nur einmal ganz am Anfang auf True zu setzen, bevor du das Bild lädst! Denn nachdem das auf True gesetzt wurde wird bei allen danach geladenen Bildern automatisch der Bezugspunkt in die Mitte gesetzt!
In der Schleife bringt das gar nichts!

Ausserdem muss es bei Atan2 glaube ich A=ATan2(MX-PX,MY-PY) heißen, also MY und PY andersrum, bin mir da aber nicht 100% sicher.

MfG Ctuchik
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!
 

f L i P

BeitragFr, Jun 10, 2005 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Das bringts auch nicht, vielleicht wäre wie ichs versucht hab zu erklären jemand in der Lage meinen Code nur zu verbessern, denn das hat mir jetzt nichts genutzt. Hab MY und PY vertauscht, kommt auch ne falsche Drehung bei raus, und Automidhandle hab ich auch aus der Schleife geholt (falls das überhaupt nötig sein sollte) ...

MfG fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!
 

hitokiri

BeitragFr, Jun 10, 2005 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ATan2( y2 - y1, x2 - x1 ) gives the proper orientation for object1.
You can use this angle to select an appropriately rotated image.

Notice the reverse order, ATan2( y, x ) rather than ATan2( x, y).
ATan2( y, x ) is analogous to ATan( y / x), but covers 360 degrees.

nuff said.
 

f L i P

BeitragFr, Jun 10, 2005 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß ich müsste daraus jetzt schließen können was zu tun ist, ich tu es aber leider nicht Shocked , kann mir jetzt jemand das ATan2-Prinzip wortklein erklären? Nicht auf die OH verweisen Wink

MfG fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!
 

hitokiri

BeitragFr, Jun 10, 2005 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
x und y ist vertauscht bei atan2 also muss es folglich heissen:

y2-y1,x2-x1
bwz:
my-py,mx-px

ist klar, dass es bei dir eine falsche orientation gibt wenn du wie in deinem code mx-px,my-py machst.
 

f L i P

BeitragFr, Jun 10, 2005 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, also Y zuerst, verstanden, aber es will immer noch nicht, wie stell ich den Ursprung der Drehung und die Mitte des Bildes auf 0,0 ?

AppTitle ""
Graphics 400,300,32,0
SetBuffer BackBuffer()

Z01=LoadImage("01.png")

AutoMidHandle True
While Not KeyHit(1)
Cls
MX=MouseX()
MY=MouseY()
PX=GraphicsWidth()/2-ImageWidth(Z01)/2
PY=GraphicsHeight()/2-ImageHeight(Z01)/2
DrawImage Z01,PX,PY
RotateImage Z01,A
A=ATan2(MY-PY,MX-PX)
Flip
Wend
End

MfG fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!

Artemis

BeitragFr, Jun 10, 2005 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit ql:MidHandle kann man das für einzelne bilder machen!
 

hitokiri

BeitragFr, Jun 10, 2005 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Irgendwie kapiere ich deine frage nicht so ganz.... mit automidhandle=1
wird das bild automatisch immer exakt in seiner mitte angesprochen wenn du das vor dem laden des bildes setzt, also
automidhandle true
loadimage blublubb

dann setzt du es einfach an den punkt graphicswidth/2 , graphicsheight/2
durch das automidhandle ist es damit zentriert in der mitte.
so wie du es im moment hast sprichst du dein bild an dem punkt
bei einer angenommenen auflösung von 800x600 und 100x100 für dein bild
so an:
px=800/2-100/2=350 und nicht 450 ! also sprichst du es am linken rand an und nicht in der mitte.
py=600/2-100/2=200 also sprichst du es am oberen rand an und nicht in der mitte.

px und py bleiben doch gleich, sind doch immer graphicswidth/2 und graphicsheight/2.

*total verwirrt*
 

f L i P

BeitragFr, Jun 10, 2005 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Automidhandle true sollte doch alle Bilder in der Mitte ansprechen, tut es aber nicht.

PX=GraphicsWidth()/2
PY=GraphicsHeight()/2
AutoMidHandle True
DrawImage Z01,PX,PY

Links oben wird angesprochen, auch wenn automidhandle außerhalb der schleife liegt

MfG fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Jun 10, 2005 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
AutoMidHandle True muß vor dem laden bzw. vorm erstellen der Grafik stehen!
[BB2D | BB3D | BB+]
 

f L i P

BeitragFr, Jun 10, 2005 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Vor drawimage, aber nach loadimage ?!

fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!
 

hitokiri

BeitragFr, Jun 10, 2005 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
vor loadimage nach dem graphics width,height,bla,bla
 

f L i P

BeitragFr, Jun 10, 2005 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
soweit so gut, das programm frisst dermaßen speicher, wie mach ich dass es auch in echtzeit zu keinerlei problemen kommt ?!

MfG fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!
 

hitokiri

BeitragFr, Jun 10, 2005 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
das image in 360 drehungen um 0 bis 359 grad in einem dim speichern und dann drawimage imagedim(A).
es ist nicht das speicherfressen bei dir, das es so langsam macht, sondern das rotieren, die berechnung dessen.
 

f L i P

BeitragFr, Jun 10, 2005 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Dazu muss ich mich jetzt mit Dims befassen.
Werde das Thema dann wieder ausbuddeln.

So, hab es mir sehr sehr viel schwieriger vorgestellt!
Habe jetzt das Problem dass ich nicht weiß wie man jetzt jeden Wert abspeichert, Code würde mir helfen, dann kann ich ihn mir nach und nach vorknöpfen.

MfG fLiP
mir egal wer dein Vater ist- solange ich hier am angeln bin wird nicht über's wasser gelaufen!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group