Schräg Schiessen
lima-city → Forum → Die eigene Homepage → Flash und Silverlight
bewegen
code
fehler
fliegen
formel
funken
funktion
jemand
klammer vergessen
korrektur
letzten fehlermeldung
maus
objekt
problem
programm
rechts fliegen
richtung
schiessen
unsicher beitrag
winkel
-
Mein Ziel ist es bei meinem Flash Spiel zu Schiessen.
Die Schuss soll Richtung Maus fliegen.
var maush;
this.onEnterFrame = function() {
this._x += 9;
maush = _ymouse;
this._y += _ymouse;
if (this._x>550) {
this.removeMovieClip();
}
Bei diesem Code springt nur leider der Schuss genau auf die Höhe von der Maus. Habt ihr eine bessere Idee. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also, ich kenne mich in Flash nicht so aus, aber in Javascript-Code wäre das:
function shoot(time) { var start_x; var start_y; var end_x; var end_y; var length = sqrt((end_x - start_x)² + (end_y - start_y)²); var diff_x = (end_x - start_x) / length; var diff_y = (end_y - start_y) / length; var new_x = start_x + diff_x * time * velocity; var new_y = start_y + diff_y * time * velocity; }
Das Ergebnis ist, dass in new_x/new_y die x-/y-Koordinate vom Projektil steht. Du musst jetzt also in jedem Frame die Funktion aufrufen und als Parameter time jeweils die seit Beginn des Schusses verstrichene Zeit eingeben. Der Faktor "velocity" in der letzten Gleichung stellt einen Skalierungsfaktor dar, der von der Geschwindigkeit des Projektils abhängt. Du müsstest ausprobieren, was du da brauchst.
Das ist sicher nicht der schnellste Weg, aber es ist der natürlichste und realistischste denk ich mal.
Beitrag geändert: 4.9.2008 14:38:08 von merovius -
Ich hab maln bischen rumprobiert und dann bin ich auf folgendes gekommen.
var start_x;
var start_y;
var end_x;
var end_y;
var slength;
var diff_x;
var diff_y;
var timer2 = 6;
this.onEnterFrame = function() {
timer2 ++;
this._x += 9;
if (timer>=5) {
end_x = _xmouse;
end_y = _ymouse;
start_x = _root.Ship._x;
start_y = _root.Ship._y;
Math.sqrt((end_x - start_x)²);
Math.sqrt((end_y - start_y)²);
diff_x = (end_x - start_x) / length;
diff_y = (end_y - start_y) / length;
this._x = start_x + diff_x * 3;
this._y = start_y + diff_y * 3;
timer = 0;
}
Da kommen folgende Fehler:
http://sep04.imghost.us/Wqh9.jpg
Hat jemand ne Lösung dafür? -
Meine Korrekturen:
var start_x; var start_y; var end_x; var end_y; var [b]length[/b]; var diff_x; var diff_y; var timer2 = 6; this.onEnterFrame = function() { timer2 ++; this._x += 9; if (timer>=5) { end_x = _xmouse; end_y = _ymouse; start_x = _root.Ship._x; start_y = _root.Ship._y; length = Math.sqrt((end_x - start_x)^2 + (end_y - start_y)^2); diff_x = (end_x - start_x) / length; diff_y = (end_y - start_y) / length; this._x = start_x + diff_x * 3; this._y = start_y + diff_y * 3; timer = 0; } }
Deine Fehler: Erstens das zweimalige MAth.sqrt ohne was damit zu machen, das hab ich so nicht gepostet ;)
Deswegen hattest du danach keine Variable length (das hat offenbar nicht gestört).
Und im Programm darf man nicht ² schreiben, sondern muss ^2 schreiben, mein Fehler...
Und zuletzt hast du afaik ganz hinten am Schluss ne Klammer vergessen.... zu viel ist auf jeden Fall keine, deswegen bin ich mir der letzten Fehlermeldung irgendwie unsicher...
Beitrag geändert: 4.9.2008 17:28:54 von merovius -
Meine Korrekturen:
var start_x; var start_y; var end_x; var end_y; var [b]length[/b]; var diff_x; var diff_y; var timer2 = 6; this.onEnterFrame = function() { timer2 ++; this._x += 9; if (timer>=5) { end_x = _xmouse; end_y = _ymouse; start_x = _root.Ship._x; start_y = _root.Ship._y; length = Math.sqrt((end_x - start_x)^2 + (end_y - start_y)^2); diff_x = (end_x - start_x) / length; diff_y = (end_y - start_y) / length; this._x = start_x + diff_x * 3; this._y = start_y + diff_y * 3; timer = 0; } }
Deine Fehler: Erstens das zweimalige MAth.sqrt ohne was damit zu machen, das hab ich so nicht gepostet ;)
Deswegen hattest du danach keine Variable length (das hat offenbar nicht gestört).
Und im Programm darf man nicht ² schreiben, sondern muss ^2 schreiben, mein Fehler...
Und zuletzt hast du afaik ganz hinten am Schluss ne Klammer vergessen.... zu viel ist auf jeden Fall keine, deswegen bin ich mir der letzten Fehlermeldung irgendwie unsicher...
Beitrag geändert: 4.9.2008 17:28:54 von merovius
Vielen Dank für deine bisherige Hilfe =)
Dein Code funzt im Mom ohne einen Fehler auszugeben aber irgentwie will das ganze trotzdem nicht wie
es eigentlich sollte ^^
Die Schüsse die gerade nach rechts fliegen funzen ohne Probleme, die, die aber nach oben sollen
gehn nach unten (Liegt an der Formel?) und die Schüsse fliegen nur in einem 45Grad Winkel nach unten.
Das Problem mit der Klammer hat sich irgentwie von selbst aufgehoben... KA wiso ^^
Hat jemand vllt noch eine andere Lösung?
(Nicht böse sein merovius aber ich glaub bei deiner Formel ist es nicht möglich nach Oben und Unten zu schiessen.) -
hast du denn keine Vector-Klasse?
Mit Methoden zum abziehen, addieren, normalisieren, usw. von Vektoren?
Wäre in dem Fall schon recht nützlich. -
Schau dir mal die Fuse-Lib an, dort gibt es Funktionen um zum Beispiel ein Objekt von einem Punkt zu einem anderen zu bewegen, dann müsstest du das Bewegen und ausrechnen nicht selber scripten, sondern gibst einfach an wo, wie schnell und mit was für einem Effekt sich das Objekt hinbewegen soll. Mit dieser Lib spart man eine Menge Zeit: http://www.mosessupposes.com/Fuse/, kann ich nur jedem, der sich für Flash interessiert empfehlen.
-
Die Schüsse die gerade nach rechts fliegen funzen ohne Probleme, die, die aber nach oben sollen
gehn nach unten (Liegt an der Formel?) und die Schüsse fliegen nur in einem 45Grad Winkel nach unten.
Nein, es liegt nicht an der Formel, die sieht 100%ig korrekt aus und sollte in alle Richtungen funken. Wenn es nicht funkt, dann liegt das entweder an falschen Werten in der Eingabe oder an komischen Rundungen. Für die Formel wäre ich bereit, mich zu verbürgen.
Aber mir ist es Wurst ;) Wie gesagt, ist einfach der natürlichste und realistischste Weg. Ich benutz ziemlich genau die gleiche Formel, um Linien zu zeichnen und die funken wunderbar gerade und Problemlos.
[edit] Einfach noch ne Frage, weil ich mich wunder, was der Code da zu suchen hat:
timer2 ++; this._x += 9; if (timer>=5)
1. Wieso benutzt du einmal timer2 und einmal timer?
2. Wieso erhähst du die x-Koord um 9? Das sollte sich eigentlich eh danach wieder zurückändern, hat da auf jeden Fall irgendwie nix zu suchen...
3. Wieso die Abfrage, ob timer>=5?
Naja, ansonsten bnutz halt einfach die Library, ich versteif mich nicht auf den Code ;)
Beitrag geändert: 4.9.2008 19:59:29 von merovius -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage