Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-10-2003, 09:43   #1 (permalink)
Steffen G.
 
Benutzerbild von Tschdaeff
 
Registriert seit: Aug 2001
Ort: Ba-Wü
Beiträge: 4.123
Question Ballkolisionen

Hi ich hab mir das script von madokan mal angeschaut

ActionScript:
  1. fscommand ("allowscale", "false");
  2. /*
  3.     Bewegen + Kollision
  4.     Funktion Version MX
  5. */
  6. Movieclip.prototype.bewegen = function (anzahl,filmbreite,filmhoehe,speed,verformung,radius,posX,posY) {
  7. with(this) {
  8. if (!ymov) {
  9.     ymov = random(speed)+1;
  10.     xmov = random(speed)+1;
  11.     ysign = random(2)-1;
  12.     if (ysign == 0) {
  13.         ysign = 1;
  14.     }
  15.     xsign = random(2)-1;
  16.     if (xsign == 0) {
  17.         xsign = 1;
  18.     }
  19.     xmov = xmov*xsign;
  20.     ymov = ymov*ysign;
  21. }
  22. if ((radius+speed)>=posX) {
  23.     xmov = xmov*(-1);
  24.     posX = radius+speed;
  25. }
  26. if ((radius+speed)>=posY) {
  27.     ymov = ymov*(-1);
  28.     posY = radius+speed;
  29. }
  30. if (posX>=((filmbreite-radius)-speed)) {
  31.     xmov = xmov*(-1);
  32.     posX = (filmbreite-radius)-speed;
  33. }
  34. if (posY>=((filmhoehe-radius)-speed)) {
  35.     ymov = ymov*(-1);
  36.     posY = (filmhoehe-radius)-speed;
  37. }
  38. for (var n=1;n<=anzahl;n++) {   
  39.         n_x = _parent[n]._x;
  40.         n_y = _parent[n]._y;
  41.         n_radius = _parent[n]._width/2;
  42.         d_x = (posX+xmov)-n_x;
  43.         d_y = (posY+ymov)-n_y;
  44.         if (((d_x*d_x)+(d_y*d_y))<((radius+n_radius)*(radius+n_radius))) {     
  45.             nx = _parent[n].xmov;
  46.             ny = _parent[n].ymov;
  47.             tempx = xmov;
  48.             xmov = nx;
  49.             _parent[n].xmov = tempx;
  50.             tempy = ymov;
  51.             ymov = ny;
  52.             _parent[n].ymov = tempy;           
  53.         }   
  54. }
  55. _x = (posX+xmov);
  56. _y = (posY+ymov);
  57. _yscale = random(verformung)*1.1+60;
  58. _xscale = random(verformung)*1.1+60;
  59. }
  60. }
  61. /*
  62. _______________________________
  63.   Klone Funktion Version 1.0
  64. _______________________________
  65. */
  66. Movieclip.prototype.klone = function (anzahl) { 
  67.     for (i =1; i < anzahl; i++) {
  68.         duplicateMovieClip (1, 1+i, -i);
  69.         _root[1+i]._x = random(600)-_root[1+i]._width;
  70.         _root[1+i]._y = random(450)-_root[1+i]._height;
  71.     }
  72. }
  73. klone(5);

jetzt hab ich ne frage... also wenn die kugeln den gleichen radius haben und nicht stehen funkt das script ja wunderbar...
aber was mach ich wenn ich eine stehende kugel habe und die nicht genau mittig treffen will... dann rollt diese ja in nem bestimmten winkel weg und die kugel die anstößt fährt auch in nem bestimmten winkel weg...

so sollte es halt sein und das geht mit diesem script ja nicht

habt ihr sowas schonmal gemacht?

am besten sollte es auch noch auf verschiedene radien funktionieren

cu mfg
Tschdaeff
__________________
mod@
www.flashbattle.de
www.steffen-guse.de
------------------------------------

Tschdaeff ist offline   Mit Zitat antworten
Alt 02-10-2003, 16:21   #2 (permalink)
Steffen G.
 
Benutzerbild von Tschdaeff
 
Registriert seit: Aug 2001
Ort: Ba-Wü
Beiträge: 4.123
ich hab jetzt das mal geschrieben...

ActionScript:
  1. rad = 10
  2. speed = 4
  3. fakt = speed/rad
  4. movieclip.prototype.koll = function (xadd,yadd) {
  5.     this.xmov = xadd
  6.     this.ymov = yadd
  7. }
  8.  
  9. movieclip.prototype.move = function () {
  10.     this.onEnterFrame = function () {
  11.         this._x += this.xmov
  12.         this._y += this.ymov
  13.        
  14.         if (this._x < 20 || this._x > 180) {
  15.             this.xmov *= -1
  16.         }
  17.         if (this._y < 20 || this._y > 280) {
  18.             this.ymov *= -1
  19.         }
  20.     }
  21. }
  22.  
  23. this.onEnterFrame = function () {
  24.     if (!this.hit) {
  25.     k1._x += 2
  26.     k1._y += 4
  27.     }
  28.     this.xdif = k2._x - k1._x
  29.     this.ydif = k2._y - k1._y
  30.     if (this.xdif*this.xdif+this.ydif*this.ydif < (rad*2)*(rad*2)) {
  31.    
  32.         this.hit++
  33.         this.ya = this.ydif
  34.         this.xa = this.xdif
  35.         k2.koll (this.xa*fakt,this.ya*fakt)
  36.         k1.koll(this.ya*fakt,this.xa*fakt)
  37.            
  38.     }
  39. }
  40.  
  41. k1.move ()
  42. k2.move ()

kann das bitte mal jemand testen...
einfach 2 kugeln machen mit 20 einheiten durchmesser und k1 bzw k2 benennen und dann noch schauen das sie den weg kreuzen...

einige kollisionswinkel stimmen glaube ich aber ich hab das dumpfe gefühl das einige auch nicht stimmen

cu mfg
Tschdaeff
__________________
mod@
www.flashbattle.de
www.steffen-guse.de
------------------------------------

Tschdaeff 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 16:55 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele