winkelberechnung (maus - spieler)

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

haschhase

Betreff: winkelberechnung (maus - spieler)

BeitragSo, Feb 06, 2005 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 06, 2005 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
das hat hier doch bestimmt schon mal jeder gemacht, also raus damit Smile
nei nei so kann das nicht weitergehen...
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragSo, Feb 06, 2005 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 06, 2005 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Global player(359)



und jetzt?
nei nei so kann das nicht weitergehen...
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragSo, Feb 06, 2005 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

Shocked

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 Smile

Toni
... ..... .i.. ...

***
Sieger des BB-Gameboy-Contest 2004
Sieger des Blitzbaster 2D-Minigolf-Contest 2005
***
 

haschhase

BeitragSo, Feb 06, 2005 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 06, 2005 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
Blitz+; Blitz3d; BlitzMax; GLBasic; Purebasic;
GameMaker Studio 1.4xx; AGK;
 

haschhase

BeitragSo, Feb 06, 2005 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 06, 2005 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragSo, Feb 06, 2005 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 06, 2005 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink .
 

haschhase

BeitragSo, Feb 06, 2005 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 06, 2005 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Da musste man glaube ich +180 beim Ergebnis der Winkelfunktion machen,
im Notfall auf WWW.BLITZBASIC.COM nachsehen. Hat dir mein Text garnicht
geholfen Crying or Very sad ?
 

haschhase

BeitragSo, Feb 06, 2005 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
oh sorry kekskiller, den hab ich total uebersehen
nei nei so kann das nicht weitergehen...

Triton

Betreff: Re: winkelberechnung (maus - spieler)

BeitragSo, Feb 06, 2005 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Smile



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

BeitragSo, Feb 06, 2005 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
strecke = atan2(bla,bla)
is der größte brüller überhaupt.

atan2 gibt den winkel zurück Rolling Eyes Rolling Eyes

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

haschhase

BeitragSo, Feb 06, 2005 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@ 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-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragSo, Feb 06, 2005 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 06, 2005 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
So, hier nochmals ein Code und das Bild dazu.
Das Bild(Pfeil) dreht sich jetzt immer zur Maus (Oval) hin.



user posted image

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

BeitragSo, Feb 06, 2005 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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...

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group