Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-12-2007, 04:44   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Feldberg
Beiträge: 9
Unhappy Kollisionsabfrage so einfach wie möglich

Hallo zusammen, ich bin am verzweifeln.
Versuch seit 13 Stunden eine Kugel auf der x und y Achse laufen zu lassen, wenn sie das ende der Bühne erreicht hat soll sie in die entgegengesetzte Richtung laufen.

Denke das es mit einer if else Anweisung und den umdrehen der Variablen für die Bewegung mit *-1 zu realisieren sein müsste.

Bin ein totaler noob was AS angeht

ich schaffe es auch sie nach rechts laufen zu lassen doch wenn sie das ende der bühne erreicht weiß ich nicht wie ich sie dazu bekomme wieder umzukehren^^

Glaub das liegt an dem unverständnic in meinem Kopf...

Hier mein Script soweit ich es jetzt hinbekommen habe.

stop();

xbewegung = 10;
ybewegung = 10;


_root.ball.height = 20;
_root.ball.width = 20;
_root.ball._x = 10;
_root.ball._y = 10;

positivmov = function() { <---- noch ein Stück eines
_root.ball._x += xbewegung missglückten Gedanken...
}
_root.attachMovie("ball", "ball", 1);

_root.onEnterFrame = function() {
if (_root.ball._x <=390) {
_root.ball._x += xbewegung;
}
else {
xbewegung *-1 <------------ Hier ist das Prob!
}

}
ellodron ist offline   Mit Zitat antworten
Alt 19-12-2007, 06:51   #2 (permalink)
Alter User
 
Benutzerbild von Linowitch
 
Registriert seit: Nov 2006
Ort: München
Beiträge: 485
ActionScript:
  1. else {
  2. xbewegung *=-1 <------------ Hier ist das Prob!
  3. }

Man beachte das =
__________________
Gruß Linowitch
Wer glaubt gut zu sein hat aufgehört besser zu werden!

Website
Linowitch ist offline   Mit Zitat antworten
Alt 19-12-2007, 11:04   #3 (permalink)
Rock'n'Bass
 
Benutzerbild von <sVkVmVit>
 
Registriert seit: Feb 2006
Ort: Hamburg
Beiträge: 202
So einfach kanns gehn.

PS: Mal nur aus reinem Interesse:
Würde die erste Version denn so auch funzen?
Code:
xbewegung *= (-1);
also wenn man einfach nur -1 ind klammern setzt.
__________________
==>remix.nin.com<==
//
Life Is Too Short For Boring Music!
Fantasie ist die einzige Waffe gegen die Wirklichkeit.
<sVkVmVit> ist offline   Mit Zitat antworten
Alt 19-12-2007, 11:35   #4 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
was ist den der unterschied ob ich * -1 oder * (-1) nehme

ActionScript:
  1. stop();
  2.  
  3. var xBewegung : Number = 10;
  4. var yBewegung : Number = 10;
  5.  
  6. var ball : MovieClip = this.attachMovie( "ball", "ball", 0 );
  7. ball._x = 20;
  8. ball._y = 20;
  9. ball._width = 20;
  10. ball._height = 20;
  11.  
  12. this.onEnterFrame = function() : Void
  13. {
  14.     var r : Number = Math.sqrt( ball._width * ball._width + ball._height * ball._height ) / 2;
  15.  
  16.     if( ball._x + r >= Stage.width || ball._x - r <= 0 ) xBewegung *= -1;
  17.     if( ball._y + r >= Stage.height || ball._y - r <= 0 ) yBewegung *= -1;
  18.  
  19.     ball._x += xBewegung;
  20.     ball._y += yBewegung;
  21. }
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi

Geändert von _crypto_ (19-12-2007 um 11:45 Uhr)
_crypto_ ist offline   Mit Zitat antworten
Alt 19-12-2007, 12:06   #5 (permalink)
Alter User
 
Benutzerbild von Linowitch
 
Registriert seit: Nov 2006
Ort: München
Beiträge: 485
Der unterschied ist "Sinnlose Klammern"
__________________
Gruß Linowitch
Wer glaubt gut zu sein hat aufgehört besser zu werden!

Website
Linowitch ist offline   Mit Zitat antworten
Alt 19-12-2007, 15:55   #6 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Feldberg
Beiträge: 9
Das Script ist Perfect

Wunderbar vielen Dank für die schnelle Hilfe

Kannst du mir Bitte erklären was das:
var r : Number = Math.sqrt( ball._width * ball._width + ball._height * ball._height ) / 2;

macht ??

Wenn ich es richtig verstehe wird die (Höhe mal Höhe + Breite x Btreite) und dann die Hälfte davon
als Variable declariert.

die Variable r wird ja dann unten wieder auf den Ball gerechnet.?

Bitte um Hilfe

Geändert von ellodron (19-12-2007 um 15:57 Uhr)
ellodron ist offline   Mit Zitat antworten
Alt 19-12-2007, 16:04   #7 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.839
a²+b²=c²
r(adius)
__________________
mfg Frank
mildesign ist offline   Mit Zitat antworten
Alt 19-12-2007, 18:45   #8 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Feldberg
Beiträge: 9
anderer versuch

stop();

var hori = -1;
var verti = -1;


_root.attachMovie("ball", "ball", 1);
_root.ball.height = 20;
_root.ball.width = 20;
_root.ball._x =20;
_root.ball._y =20;
_root.onEnterFrame = function() {
if (hori == -1) {
_root.ball._x +=5;
}
else {
_root.ball._x -=5;
}
if (_root.ball._x >= 390 || _root.ball._x <= 10) {
hori *=-1
}

if (verti == -1) {
_root.ball._y =+5;
}
else {
_root.ball._y =-5;
}

if (_root.ball._y >=390 || _root.ball._y <= 10) {
verti *=-1;
}
}

das Problem ist aber das der y wert nicht richtig verarbeitet wird
so funktioniert die x abfrage wunderbar aber auf der y achse springt er nur auf und ab in einen bereich von ungefähr 10 pixel
ellodron ist offline   Mit Zitat antworten
Alt 19-12-2007, 18:59   #9 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Feldberg
Beiträge: 9
Unhappy

Fehler gefunden,

if (verti == -1) {
_root.ball._y -=5;
}
else {
_root.ball._y +=5;


man muss die Vorzeichen Vertauschen aber WARUM?

verti ist doch -1 also sollte er sich nach unten bewegen....
ellodron ist offline   Mit Zitat antworten
Alt 19-12-2007, 22:17   #10 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
wieso wieder so umständliche ifelse verzweigungen machs doch so wie cih oben geschrieben habe.

ob ich nun + -1 rechne oder -1 ist doch das gleiche aber im code
spart es sich an zeilen...

und nochmal zum r.
wenn du (wie ich denke) einen ball ahst, ist es sinnvoll die kollision an den äußeren
rändern zu machen, udn da x und y denke ich mal der mittelpunkt ist, muss der radius
mal + und mal - gerechnet werden.

kannst es auch mit getBounds() machen
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi

Geändert von _crypto_ (19-12-2007 um 22:19 Uhr)
_crypto_ ist offline   Mit Zitat antworten
Alt 19-12-2007, 22:45   #11 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Feldberg
Beiträge: 9
Ja deins klappt wunderbar wenn ich es bei mir einfüge doch sobald ich es selber schreibe, passieren komiche Sachen.

stop();
var xmove : Number = 10;
var ymove : Number = 10;

var ball : MovieClip = this.attachMovie ("ball", "ball", 0);

ball.height = 20;
ball.width =20;
ball._x = 20;
ball._y =20;

this.onEnterFrame = function() : Void {
var r:Number = Math.sqrt(ball.height * ball.height + ball.width * ball.width) / 2;

if( ball.width + r >= Stage.width || ball.width - r <= 0) xmove* -1;
if( ball.height + r >= Stage.height || ball.width -r <= 0) ymove* -1;

ball._x += xmove;
ball.y += ymove;
}

das ist doch genauso wie deins oder übersehe ich da was?

Das Problem ist das ich das mit dem Void in dem Script nicht kenne.
Dadurch kann man hinter if() direkt sagen was er machen soll wenn if erfüllt ist ohne {}????

Wir schreiben morgen ne Prüfung und da is heikel wenn ich ein Script benutze was ich nicht zu 100% verstehe.

Mir ist das andere auch zu überladen deins macht ja das gleich mit viel wenieger Script.
ellodron ist offline   Mit Zitat antworten
Alt 19-12-2007, 23:31   #12 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Feldberg
Beiträge: 9
Wink 1a Wunderbar

ah hab den Fehler gefunden.

ball._height = .......


Warum muss man da die Unterstriche mache?
dachte das ist nur bei

ball._x zu machen????
ellodron ist offline   Mit Zitat antworten
Alt 20-12-2007, 00:11   #13 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Zitat:
Zitat von ellodron Beitrag anzeigen
ah hab den Fehler gefunden.

ball._height = .......


Warum muss man da die Unterstriche mache?
dachte das ist nur bei

ball._x zu machen????
Nein, das ist auch bei height und width und vielen anderen Dingen so.
Solche Dinge kannst du ganz schnell in deiner Flashhilfe nachschauen.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 20-12-2007, 06:36   #14 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Feldberg
Beiträge: 9
Thumbs up Danke für die schnelle Hilfe

allerdings nicht immer, wenn ich micht nicht täusche nur wenn man die Werte beinflussen will, zum reinen Auslesen wohl nicht.

Aber trotzdem Danke.

Hab mich echt in das Script verliebt Vielen Dank nochmal Frauenarzt / _crypto_ !!!!

Würd mich zwar freuen wenn mir das jemand nochmal genauer mit dem Void erklären könnte, und was genau das Math.sqrt macht, aber denke soweit hab ich es verstanden.


Wie kann ich noch eine Abfrage hinzufügen die mir in einem Textfeld ausgibt wie oft er den Rand auf der x Achse berührt?

if ( ball._x +r >= Stage.width || ball._x - r <= 0) zähler +=1; ???? Bitte um schnelle Hilfe schreib in ner halben Stunde Prüfung.....

Geändert von ellodron (20-12-2007 um 10:20 Uhr)
ellodron ist offline   Mit Zitat antworten
Alt 20-12-2007, 10:37   #15 (permalink)
Neuer User
 
Registriert seit: Jun 2007
Beiträge: 71
Math.sqrt benutzt man zur Wurzelberechnung!

void bedeutet, das die Funktion keinen Rückgabewert hat.
Würdest du bspw. function():String schreiben müßtest du gewährleisten, dass deine Funktion nen String zurückgibt. Wenn du keinen Rückgabewert brauchst, schreibste halt :void, was man wahlweise auch weglassen kann!

Das hinter der if-Anweisung keine {} gesetzt werden liegt daran, das nur eine Anweisung danach steht. Müßten im Falle der if-Anweisung 2 oder mehrere Anweisungen ausgeführt werden, wären die Klammern Pflicht.

Wie du siehst alles keine Hexerei. Und alles sehr schön in der Flash-Hilfe nachzulesen
Rotzlucky ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele