winkelberechnung (maus - spieler)
Übersicht

haschhaseBetreff: winkelberechnung (maus - spieler) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HI leute, so hab gestern angefangen in BlitzBasic zu proggen (hab aber schon erfahrung mit c++, vb) und hab mir gedacht, schreib ich gleich mal nen kleinen shooter, so is schoen und gut
nun haeng ich aber an der winkel berechnung zwischen spieler und maus, damit sich spaeter der spieler zur maus drehen soll Code: [AUSKLAPPEN] Global xMouse = 0 Global yMouse = 0 xMouse = MouseX() yMouse = MouseY() ; hier die hauptschleife RotatePlayer() RotateImage player, rotX# DrawImage player,x#,y# ; und hier die 2 funktionen zur berechnung des winkels Function Direction#(OtX#,OtY#,EnX#,EnY#) ; get the way between both points Return ATan2(OtX#-EnX#,OtY#-EnY#)+90 End Function ; rotate player to mouse Function RotatePlayer() rotX# = Cos(Direction#(x#,y#,xMouse,yMouse)) rotY# = Sin(Direction#(x#,y#,xMouse,yMouse)) End Function nunja, wie ihr seht bekomm ich mit ATan2 die strecke zwischen maus und und spielerfigur heraus und mittels rotateplayer moechte ich die berechnung stattfinden lassen nur, ich bekomm ja da jetzt 2 verschiedene werte fuer den winkel wie fass ich das zusammen? |
||
nei nei so kann das nicht weitergehen... |
haschhase |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das hat hier doch bestimmt schon mal jeder gemacht, also raus damit ![]() |
||
nei nei so kann das nicht weitergehen... |
Hot-BitSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hoi.
So, wie du es willst, ist es für die Fische ... Wäre in einem Programm so nicht gut zu handhaben. Erzeuge zuerst mal deine 360 Bilder, und dann sehen wir weiter. Toni |
||
... ..... .i.. ...
*** Sieger des BB-Gameboy-Contest 2004 Sieger des Blitzbaster 2D-Minigolf-Contest 2005 *** |
haschhase |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Global player(359) und jetzt? |
||
nei nei so kann das nicht weitergehen... |
Hot-BitSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hoi.
![]() Bitte, poste deine Problemchen das nächste mal in den Beginner-Corner. Ok, und nun erstellst du 360 Bilder. Rechts oben gibt es so eine Funktion, die heißt SUCHEN. Da gibst dann ein, was du wünscht, und schon wird dir geholfen ![]() Toni |
||
... ..... .i.. ...
*** Sieger des BB-Gameboy-Contest 2004 Sieger des Blitzbaster 2D-Minigolf-Contest 2005 *** |
haschhase |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
willst du mich vereppeln?
ich hab das doch alles schon, das problem liegt beim drehen wie bekomm ich den winkel aus dieser formel heraus haschHase hat Folgendes geschrieben: nur, ich bekomm ja da jetzt 2 verschiedene werte fuer den winkel wie fass ich das zusammen? |
||
nei nei so kann das nicht weitergehen... |
D²O |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
meinst Du vieleicht so ?
Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer () Global Link$ = "http://www.deuteriumoxid.com" Global mx,my,mh1 While Not KeyHit(1) mx = MouseX () my = MouseY () winkel = (ATan2 (300-my,300-mx)+360)Mod 360 Rect 300,300,2,2 Oval mx,my,2,2 Line 300,300,mx,my Text mx,my,"Winkel "+winkel+"°" Flip:Cls Wend:End Edit: Nimms Hotti nicht übel, so direkt wie er auch ist, er meints nur gut mit Dir/Uns ![]() |
||
Blitz+; Blitz3d; BlitzMax; GLBasic; Purebasic;
GameMaker Studio 1.4xx; AGK; |
haschhase |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich brauch ja ne winkelfunktion !!!
dass die so wie ich se hab net geht ist mir auch klar, lesen!!! ausserdem , in opengl kann man das ganz leicht ueber glRotatef machen, da brauchste keine weiss gott wie vielen bilder erstellen und speicher verbrauchen ohne ende dass ich dann das bild ueber RotateImage player(ang), ang drehe ist mir auch klar, aber die frage ist seit dem ersten post wie bekomm ich den winkel |
||
nei nei so kann das nicht weitergehen... |
![]() |
Xalon |
![]() Antworten mit Zitat ![]() |
---|---|---|
@haschhase:Tu so als ob a-bit nix geschriebenn hätte,der redet eh oft nur shit.
Suchst du die funktion sin oder cos? Xalon |
||
>>Besucht doch mal meine Seite,mit NEUEN Tutorials<<
User posted image |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde HB hat recht, er soll sein Problem vernümpftig schildern.
Wenn er sich nun mal die Funktion ATAN2 angucken würden, wäre er nen stück weiter, wüsste aber eh nicht, wie er die benutzt. Eigne dir diese Funktion an. Die Bilder haste dann ja schon. Musste im RAM kopieren und neue Variavle zuweisen, is nich schwer. IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich werde mal versuchen, hier aufzuräumen:
Deine Funktion zur WinkelSUCHE gibt dir einen einfachen Winkel, 0-360. Sinus und Cosinus berechnen dir keine Bogengrade oder ähnliches daraus, sowieso brauchst du für Rotateimage nur die Winkelmaße von 0-360. Daher: Code: [AUSKLAPPEN] Global xMouse = 0
Global yMouse = 0 xMouse = MouseX() yMouse = MouseY() RotateImage player,Direction#(x#,y#,xMouse,yMouse) DrawImage player,x#,y# Function Direction#(OtX#,OtY#,EnX#,EnY#) ; get the way between both points Return ATan2(OtX#-EnX#,OtY#-EnY#)+90 End Function Falls dir das dennoch nicht verständlich ist, am besten über Sinus und Cosinus im Mathebuch nachschlagen. Hoffe, ich habe das Problem auf- gegriffen... Btw: Das sofortige Rotieren der Bilder ist SEHR lahm. Daher solltest du die Adressen der Bilder (Rückgabe von LoadImage) in ein DimFeld laden, nach dem du sie gedreht hast: Code: [AUSKLAPPEN] Dim bild(359) bild(0) = LoadImage("...") ;da reinmachen For z = 0 To 359 If z <> 0 bild(z) = CopyImage(bild(0)) RotateImage bild(z), z EndIf Next Müsste so stimmen, aber das Prinzip ist hier verständlich. @HB: Deine Ansicht ist verständlich, aber dennoch bist du nen saumieser Erläuterer ![]() |
||
haschhase |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
a-bit, beruhig dich wieder...
also das problem hab ich doch jetzt schon oft genug dargestellt, winkel will ich rausbekommen als erstes brauch ich die strecke zwischen bild und maus das loes ich mit ATan2 danach ueber winkelfunktion, sagen wir mal cos den winkel also strecke = ATan2(xPos - xMouse, yPos - yMouse) + 90 die atan2 funktion funktioniert wunderbar, denn wenn ich strecke ausgeb, zeigt er genau die strecke zwischen spieler und maus an und jetzt cos ang = cos(strecke) so und dann muss ich doch nur for i = 0 to 359 player(ang) = loadimage rotateimage player(ang) , ang maskimage player(ang) , 255,255,255 next und in der hauptschleife rotateimage player(ang), ang drawimage player(ang), x, y oder? |
||
nei nei so kann das nicht weitergehen... |
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da musste man glaube ich +180 beim Ergebnis der Winkelfunktion machen,
im Notfall auf WWW.BLITZBASIC.COM nachsehen. Hat dir mein Text garnicht geholfen ![]() |
||
haschhase |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh sorry kekskiller, den hab ich total uebersehen | ||
nei nei so kann das nicht weitergehen... |
![]() |
TritonBetreff: Re: winkelberechnung (maus - spieler) |
![]() Antworten mit Zitat ![]() |
---|---|---|
haschhase hat Folgendes geschrieben: nun haeng ich aber an der winkel berechnung zwischen spieler und maus, damit sich spaeter der spieler zur maus drehen soll
... nur, ich bekomm ja da jetzt 2 verschiedene werte fuer den winkel Wieso bekommst du zwei verschiedene Werte? Ermittel den Anstiegswinkel der linearen Fkt. zwischen Spieler und Maus und dann haste deinen einen Winkel. tan(anstiegswinkel)=mausy-spielery/mausx-spielerx (=m) Vielleicht ist das ja genau das, was du da versuchst, komplett verstanden hab ichs, wie die anderen wohl auch, nicht. ![]() edit-- Ach ja, bitte nicht 360 bilder machen, 36 reichen vollkommen. Die zwischenwerte muss man dann runden. |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
strecke = atan2(bla,bla)
is der größte brüller überhaupt. atan2 gibt den winkel zurück ![]() ![]() IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
haschhase |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ kekskiller, also das bild dreht sich wie verrueckt bei deinem versuch
@imurdoom, ups da hab ich wohl was verwechselt naja, also den winkel hab ich ja dann, nur mit den ganzen versuchen das bild zum drehen zu bekommen sinkt die qualitaet auf 0 und es faengt uebelst an zu ruckeln |
||
nei nei so kann das nicht weitergehen... |
Hot-BitSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hoi.
Wie oft muß man bei dir reden ? Mache zuerst deine 360 Bilder. Und dann greif darauf zu ! Toni |
||
... ..... .i.. ...
*** Sieger des BB-Gameboy-Contest 2004 Sieger des Blitzbaster 2D-Minigolf-Contest 2005 *** |
D²O |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, hier nochmals ein Code und das Bild dazu.
Das Bild(Pfeil) dreht sich jetzt immer zur Maus (Oval) hin. ![]() Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer () HidePointer TFormFilter 0 AutoMidHandle 1 Dim bild(360) bild(0) = LoadImage("1.png") ;da reinmachen For z = 0 To 360 If z <> 0 bild(z) = CopyImage(bild(0)) RotateImage bild(z), z EndIf Next Global mx,my While Not KeyHit(1) mx = MouseX () my = MouseY () winkel = (ATan2 (300-my,300-mx)+270)Mod 360 DrawImage bild(winkel),300,300 Oval mx,my,10,10 Text mx,my,"Winkel "+winkel+"°" Flip:Cls Wend:End |
||
Blitz+; Blitz3d; BlitzMax; GLBasic; Purebasic;
GameMaker Studio 1.4xx; AGK; |
haschhase |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hab ich doch, nur das ganze ruckelt wie sau
Code: [AUSKLAPPEN] Dim player(359) TFormFilter 0 For i = 0 To 359 player(ang) = LoadImage("player.bmp") RotateImage player(ang),0 MaskImage player(ang),255,255,255 Next RotateImage player(ang), Angle() DrawImage player(ang),x# + 400,y# + 300 Function Angle() Return ATan2(x#- xMouse, yPos# - yMouse) + 90 End Function |
||
nei nei so kann das nicht weitergehen... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group