Problem mit Atan2 (Autodrehung durch Maus)
Übersicht

![]() |
Die KisteBetreff: Problem mit Atan2 (Autodrehung durch Maus) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich bin neu hier im Forum und dies ist mein 1. Post Ich wollte mal grade eben zwischendurch ein Auto Programmieren das sich per Pfeiltaste(Oben) und Maus Steuern lässt ,nun das hab ich soweit geschaft doch wenn ich die Maus schnell Hinter´s Auto Ziehe bekomme ich entweder die Fehlermeldung "Array out of Bounds" oder "Image does not Exist" . Hab mich schon im Forum umgesehen ,aber je mehr ich davon lese desto wengier versteh ich. ![]() Code: [AUSKLAPPEN] Graphics 800,600,32,1
SetBuffer BackBuffer() Dim Auto(360) TFormFilter 0 For winkel = 0 To 359 Auto(winkel)=LoadImage("Lupo.png") RotateImage auto(winkel),winkel MidHandle Auto(Winkel) MaskImage Auto(winkel),255,0,255 Next Global Maus=LoadImage ("Maus.png") Global geschwindigkeit#=1 Global x#=400,y#=300 Repeat Maus() winkel=(ATan2( MouseY() - Y, MouseX() -X )+ 360) Mod 360 If KeyDown (200) x = x + Cos(winkel)*geschwindigkeit y = y + Sin(winkel)*geschwindigkeit End If DrawImage auto(winkel),x,y Flip Cls Until KeyHit (1) End Function Maus() mx=MouseX() my=MouseY() MaskImage Maus ,255,0,255 DrawImage Maus,mx,my End Function Würde mich über euere Hilfe freuen Lg "Die Kiste" ~EDITIERT~ Das mit der Ganzbeitragsformatierung lass ich ja mal sowas von nicht durchgehen, unterlasse das in Zukunft! Mfg und herzlich willkommen an Board Holzchopf |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um nur dein Problem anzusprechen
Ich würde nach der Winkelberechnung ein... BlitzBasic: [AUSKLAPPEN] Winkel = Int( ( Winkel +360 ) Mod 360) ... setzen, um auszuschließen, dass er negative Winkel oder Werte über 360° geben könnte [EDIT] ich bin scheinbar total verblödet jetzt: Das hast du ja längst!!! Sorry |
||
![]() |
blackgecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab jetzt mal ein bisschen an deinem Code rumgepfuscht und so gehts anscheinend:
Code: [AUSKLAPPEN] For winkel = 0 To 360
(Das ist die Stelle, an der das Bild gedreht wird) Musst aber mal ein bisschen rumprobieren, obs wirklich geht. Ich kann dir auch nicht auf Anhieb sagen, an was es hing. In den Code solltest du noch einen Timer einbauen, so wie es jetzt ist, hat das Spiel 100% CPU-Auslastung. |
||
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die. |
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch eine kleine Frage ,sollte ich bei so kleinen Auschnitten des Codes (Z.b winkel=(ATan2( MouseY() - Y, MouseX() -X )+ 360) Mod 360 )auch als Code formatiert sein?
Ach und ,ihr seid ja richtig fix hier im Forum, woanders müsste man länger warten... |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
winkel#=(ATan2( -0.1, 100 )+ 360) Mod 360
Print winkel dieser Wert bringt einen Winkel von 359.942719 und damit brauchst du das 360. Bild oder den INTEGER() |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: dieser Wert bringt einen Winkel von 359.942719
Floor ![]() Damit machst du 359.942719 zu 359 Du könntest es natürlich auch so machen: BlitzBasic: [AUSKLAPPEN] winkel = Int(ATan2(...)) |
||
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dankeschön ![]() Eigentlich dachte ich ,dass das so hätte sein sollen... (Da ich sowas schonmal gemacht habe,aber es in Totalen Spaghetti-Code geendet ist, der irgendwo auf meinem andren Pc rumgeistert) Und dazu ich das so mehrmals gesehen habe ,aber anscheinend hab ich mich geirrt und die Winkel in den andren Beispielen(Inklusive mein Spaghetti-Code ![]() Naja es Funktioniert,vielen Dank [EDIT] Der Timer kommt noch, ist schließlich erst der Anfang und ein Werk von 5 min (5 min die es brauchten mich zum verzweifeln zu Bringen ) |
||
- Zuletzt bearbeitet von Die Kiste am Fr, Jan 08, 2010 21:05, insgesamt einmal bearbeitet
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
besser als Floor![]() ![]() Mod gibt den Restwert zurück. Winkel Mod 360 dann wird eine 360 zu einer 0, denn 360/360 = 1 Rest 0 und 361 wird zu einer 1, denn 361/360 = 1 Rest 1 Greez TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: besser als Floor ist Mod
![]() Code: [AUSKLAPPEN] winkel=(ATan2( MouseY() - Y, MouseX() -X )+ 360) Mod 360
Ganz am Schluss, oder muss Mod nochmal hin? |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das +360 muss raus. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
nehm alles zurück | ||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aiaiai, was hier in letzter Zeit jeder die Vorredner korrigieren muss, ist ja echt mal schlimm. Leute, was ihr da tut, ist ja sicher gut gemeint, aber denkt ihr nicht auch, dass ihr manchmal damit ein wenig zu viel des guten leistet?
Natürlich will jeder als hilfsbereiter Mensch dastehen, aber mir scheint, dieser Wille führt vermehrt dazu, gesagtes einfach noch mal zu sagen ![]() Und weil's so in ist, spring ich auch mal auf den Zug ![]() @Timbo: Du hast offenbar das Problem nicht ganz verstanden. Denn Atan2 ![]() @Tennisball: Floor ist überflüssig. Die Kiste (der Threadersteller, nicht der Computer) braucht ja schlussendlich auch nur n Int, wieso also noch eine zusätzliche floatingpoint-Operation? Midimaster hat's gesagt - und zwar auf eine für Anfänger gute weise: er hat nicht das fertige Resultat hingeworfen, sondern Hinweise gegeben - Int ![]() @Nicdel: Das +360 muss da hin, weil Atan2 ![]() ![]() mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nicdel hat Folgendes geschrieben: Das +360 muss raus.
Wieso ich dachte das sollte man bei Atan2 machen da er werte von -90 bis 90 ausspuckt? Abgesehen davon kommt wenn ich die +360 enferne, kommt gleich nach dem Start "Array index out of Bounds" |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok ![]() tut mir ja leid . Hab ich nicht mit Absicht gemacht. |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: @Nicdel: Das +360 muss da hin, weil Atan2 Werte von -180 bis +180 liefert, Mod aber nur mit positiven Zahlen korrekt arbeitet.
*hust* Das kommt davon, wenn man zuviel mit BlitzMax arbeitet. Da macht das keine Probleme mehr... Edit: Denk ich immer noch falsch, oder ist +180 nicht besser geeignet als +360? |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei +180 verfälscht du den Winkel. Bei +360 jedoch nicht da +10° und +370° die selbe Richtung ergeben, aber von Atan2 richtig gekürzt wird. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
ups ![]() Okaaay ,Danke für euere Hilfe. Hab ich richtig verstanden? Code: [AUSKLAPPEN] ...
winkel=(ATan2( MouseY() - Y, MouseX() -X )+360) Mod 360 Winkel = Int Winkel ... Wenn ja,dann weiß ich nicht warum auf einmal der Debuger (nach einiger Zeit) nurnoch "Image does not exist" ausspuckt ,das Bild wird doch geladen ,oder? [Edit] Was villeicht auch wichtig sein könnte, die Fehlermeldung wird nur aussgegeben wenn ich die Pfeiltaste oben Gedrück halte (Das Auto Praktisch fährt) |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Winkel kann noch größer als 360° sein, und <0°.
Das musst du noch checken ala Zitat: If Winkel<0 Then Winkel=359
|
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
oder halt
winkel=(winkel + 360) Mod 360 |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
Die Kiste |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke,
Wenn ich die Int sache nach "Drawimage..." Setze Funktioniert es. Ich glaub das hat Holzchopf mit Zitat: (man muss halt nur zum richtigen Zeitpunkt casten *hust*) gemeint. Nochmal vielen Dank ,mach mal jetzt aber schluss mit Coden nacher hock ich noch die ganze Nacht an nem andren Problem ... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group