Anzeige

Funktion mehrfach gleichzeitig ausführen?

Funktion mehrfach gleichzeitig ausführen? | PSD-Tutorials.de

Erstellt von Arceus, 15.11.2008.

  1. Arceus

    Arceus Gesperrt

    Dabei seit:
    28.11.2007
    Beiträge:
    36
    Geschlecht:
    männlich
    Funktion mehrfach gleichzeitig ausführen?
    Huhu,
    ich möchte ein kleines Strategie Spiel machen und beim bewegen weniger Test Einheiten kommen schon die ersten Probleme: http://raigen.eu/raigen/battle.swf

    Ich kann max. 1 Einheit gleichzeitig bewegen.
    Hier mal die Funktion:
    PHP:
    1. // Bewegungsfunktion
    2. var move_unit = function(instance:String, x_coord:Number, y_coord:Number, cosius_speed:Number) {;
    3.     if(unit_selected != NULL) {
    4.         var p:Point                                 = new Point(x_coord, y_coord);
    5.         var dx:Number                         = p.x-_root[instance]._x;
    6.         var dy:Number                         = p.y-_root[instance]._y;
    7.         var RADIANS:Number                 = Math.atan2(dy, dx)/Math.PI*180;
    8.         var DEGREES:Number                 = RADIANS*Math.PI/180;
    9.        
    10.         TweenLite.to(_root[instance], cosinus_speed, {_rotation:Math.round(RADIANS)});
    11.         TweenLite.to(_root[instance], cosius_speed, {_x:x_coord, _y:y_coord,  _rotation:Math.round(RADIANS)});
    12.     }
    13. };
    14.  
    15. this.onMouseDown = function() {;
    16.     move_unit(unit_selected, _xmouse, _ymouse, unit_selected_speed);
    17. };
    Hoffe ihr kennt eine Lösung =)
     
    #1      
  2. campman

    campman Nicht mehr ganz neu hier

    Dabei seit:
    01.10.2008
    Beiträge:
    207
    Geschlecht:
    männlich
    Funktion mehrfach gleichzeitig ausführen?
    AW: Funktion mehrfach gleichzeitig ausführen?

    schreibst du für jedes ding was du bewegen willst die funktion neu ?:hmpf:

    weil da fehlt mir die function in der sache :rolleyes:

    erstelle eine function und rufe sie für jedes kleines hübsches ding auf (was immer das sein soll);)

    hatte schon mal was mit nem haufen bildern, die sich gleichzeitig über ein und dieselbe function, die nur mehrfach aufgerufen wurde , bewegt wurden dat ging :lol:
     
    #2      
  3. Arceus

    Arceus Gesperrt

    Dabei seit:
    28.11.2007
    Beiträge:
    36
    Geschlecht:
    männlich
    Funktion mehrfach gleichzeitig ausführen?
    AW: Funktion mehrfach gleichzeitig ausführen?

    Nein, nein, die Funktion wird nur einmal deklariert^^
    Wenn ich auf eines dieser Dinger klicke werden sie selektiert, dass hab ich so gelöst das der Instanzname in eine Variable "unit_selected" geschrieben wird.

    Wenn ich also klicke wird die Funktion automatisch aufgerufen:
    PHP:
    1. this.onMouseDown = function() {;
    2.     move_unit(unit_selected, _xmouse, _ymouse, unit_selected_speed);
    3. };
    Achja: Ich habe eben irgendwas gedrückt (In einem anderem File) und jetzt sieht mein Skript so aus:
    [​IMG][​IMG]
    Hilfe:eek: xD
     
    #3      
  4. campman

    campman Nicht mehr ganz neu hier

    Dabei seit:
    01.10.2008
    Beiträge:
    207
    Geschlecht:
    männlich
    Funktion mehrfach gleichzeitig ausführen?
    AW: Funktion mehrfach gleichzeitig ausführen?

    ehee das mit deinem script hab ich so auch noch nicht gesehen :lol:

    Wenn ich auf eines dieser Dinger klicke werden sie selektiert, dass hab ich so gelöst das der Instanzname in eine Variable "unit_selected" geschrieben wird.


    mmm dann sollte es eigentlich gehen mmm

    bzw wenn sich mehrere gleichzeitig bewegen sollen dann brauchste auch mehrere vars denk ich

    vielleicht krieg ich ach nurnicht raus was du mit den´dingern nun machen willst :lol: mehrere auf einmal bewegen oder wie jetzt ?;)
     
    #4      
  5. Arceus

    Arceus Gesperrt

    Dabei seit:
    28.11.2007
    Beiträge:
    36
    Geschlecht:
    männlich
    Funktion mehrfach gleichzeitig ausführen?
    AW: Funktion mehrfach gleichzeitig ausführen?

    Ja sie sollen sich alle gleichzeitig bewegen und hier, extra für dich =)
    PHP:
    1. // Imports
    2. import flash.geom.Point;
    3. import gs.TweenLite;
    4.  
    5.  
    6. // Wichtige Variablen
    7. var unit_selected:String                 = NULL;
    8. var unit_selected_speed:Number        = NULL;
    9.  
    10. // Einheiten Spawn Funktion
    11. var create_unit = function(init:String, instance:String, x_coord:Number, y_coord:Number) {;
    12.     attachMovie(init,instance,this.getNextHighestDepth(),{_x:x_coord, _y:y_coord})
    13.     _root[instance].onPress             = function() {;
    14.         _root.unit_selected                 = instance;
    15.         _root.unit_selected_speed     = 6;
    16.         TweenLite.to(_root[instance], 0.4, {_alpha:70});
    17.     };
    18.     _root[instance].onEnterFrame     = function() {;
    19.         if(unit_selected                     != instance) {
    20.             TweenLite.to(_root[instance], 0.6, {_alpha:100});
    21.         }
    22.     };
    23. };
    24.  
    25. // Bewegungsfunktion
    26. var move_unit = function(instance:String, x_coord:Number, y_coord:Number, cosius_speed:Number) {;
    27.     if(unit_selected != NULL) {
    28.         var p:Point                                 = new Point(x_coord, y_coord);
    29.         var dx:Number                         = p.x-_root[instance]._x;
    30.         var dy:Number                         = p.y-_root[instance]._y;
    31.         var RADIANS:Number                 = Math.atan2(dy, dx)/Math.PI*180;
    32.         var DEGREES:Number                 = RADIANS*Math.PI/180;
    33.        
    34.         TweenLite.to(_root[instance], cosinus_speed, {_rotation:Math.round(RADIANS)});
    35.         TweenLite.to(_root[instance], cosius_speed, {_x:x_coord, _y:y_coord,  _rotation:Math.round(RADIANS)});
    36.     }
    37. };
    38.  
    39. this.onMouseDown = function() {;
    40.     move_unit(unit_selected, _xmouse, _ymouse, unit_selected_speed);
    41. };
    42.  
    43. // Deselektierungsskript
    44. var deselect:Object                                = new Object();
    45. deselect.onKeyDown                                = function() {;
    46.     if(Key.isDown(68)) {
    47.         unit_selected                                = NULL;
    48.         unit_selected_speed                        = NULL;
    49.     }
    50. };
    51. Key.addListener(deselect);
    52.  
    53. create_unit("unit_1","unit_1",200,300);
    54. create_unit("unit_1","unit_2",50,20);
    55. create_unit("unit_1","unit_3",60,50);
     
    #5      
  6. h_seldon

    h_seldon Aktives Mitglied

    Dabei seit:
    13.09.2005
    Beiträge:
    338
    Geschlecht:
    männlich
    Ort:
    Nähe München
    Funktion mehrfach gleichzeitig ausführen?
    AW: Funktion mehrfach gleichzeitig ausführen?

    Hallo,

    habe nur kurz reingeschaut, aber es fällt auf, dass unit_selected bei einem Klick auf eine der Einheiten definiert wird. Insofern wird immer nur eine Einheit ausgewählt und daher auch nur eine Einheit bewegt. TweenLite greift während jeder Bewegung auf diese Var zu und sobald sie per Klick auf ein anderes Objekt einen anderen Inhalt erhält, stopt die Bewegung des vorher aktiven Objekts abrupt (schau entweder in der Tweenlite.as oder in der Doku zu dieser Klasse nach, da müsste dann zu sehen sein, wie der Tween ausgeführt und für verschiedene Objekte gleichzeitig zugewiesen werden kann, kenne mich mit Tweenlite nicht weiter aus).

    Alternativ kannst Du eine eigene Bewegunsfunktion schreiben und die Entfernung sowie Drehung "tweenen"; die angeklickten Objekte speicherst Du in einem Array , so dass sie sich alle gleichzeitig ansprechen lassen. Apropos Drehung: sie müsste schneller erfolgen als die Bewegung zum Ziel, sonst sieht die Bewegung etwas unrealistisch aus.

    Viel Spass
     
    #6      
  7. h_seldon

    h_seldon Aktives Mitglied

    Dabei seit:
    13.09.2005
    Beiträge:
    338
    Geschlecht:
    männlich
    Ort:
    Nähe München
    Funktion mehrfach gleichzeitig ausführen?
    AW: Funktion mehrfach gleichzeitig ausführen?

    Hallo,

    habe mal ein primitives, optimierfähiges Beispiel für die Auswahl von Objekten per Strg + Klick sowie Angabe eines Ziels per Klick zusammengebastelt (enthält keine Fehlerkontrolle etc., soll nur eine mögliche Richtung zeigen).

    Annahme:
    - Auswahl der Objekte <strg>+LM auf die Objekte
    - Bewegungsziel LM
    - Es können nacheinander mehrere Objekte ausgewählt werden
    - Die Auswahl wird durch eine rote Umrandung angezeigt
    - Damit die Objekte am Ende nicht direkt übereinander liegen, falls mehrere zur gleichen Stelle geschickt werden, wird bei der Berechnung des Ziels ein kleiner Offset (positiv oder negativ) addiert
    - hier noch keine Drehung implementiert

    Bibliothek:
    - MovieClip mit Verknüpfungsname mcUnit1

    Hauptzeitleiste Bildskript:

    PHP:
    1. // -------------------- import ------------------
    2. import flash.geom.Point;
    3. import flash.filters.*;
    4. // -------------------- vars ------------------
    5. var mDummyMap:MovieClip, mUnit:MovieClip;
    6. var aUnits:Array = [];
    7. var aTempUnitsMoving:Array = [];
    8. var ptZiel:Point;
    9. var fGlow:GlowFilter;
    10. //-------------------- functions ------------------
    11. function init() {
    12.     mDummyMap = this.createEmptyMovieClip("Spielfeld", this.getNextHighestDepth());
    13.     mDummyMap.onEnterFrame = game;
    14.     mDummyMap.onMouseDown = moveIt;
    15.     fGlow = new GlowFilter(0x990000,100,5,5,2,1,true);
    16.     createUnit("mcUnit1", "unit1", 200, 300, 0.1);
    17.     createUnit("mcUnit1", "unit2", 50, 20, 0.1);
    18.     createUnit("mcUnit1", "unit3", 60, 50, 0.1);   
    19. }
    20. function createUnit(pWer:String, pInstanz:String, pXPos:Number, pYPos:Number, pTempo:Number) {
    21.     mUnit = mDummyMap.attachMovie(pWer, pInstanz, mDummyMap.getNextHighestDepth(), {_x:pXPos, _y:pYPos, nTempo:pTempo});
    22.     aUnits.push(mUnit);
    23.     mUnit.ptZiel = null;
    24.     mUnit.nOffsetX = mUnit._width/2;
    25.     mUnit.nOffsetY = mUnit._height/2;
    26.     mUnit.onPress = function() {
    27.         if (Key.isDown(Key.CONTROL)) {
    28.             aTempUnitsMoving.push(this);
    29.             this.filters = [fGlow];
    30.         }
    31.     };
    32. }
    33. function moveIt() {
    34.     if (!Key.isDown(Key.CONTROL) && aTempUnitsMoving.length>0) {
    35.         for (a in aTempUnitsMoving) {
    36.             var mWer:MovieClip = aTempUnitsMoving[a];
    37.             mWer.ptZiel = new Point(mDummyMap._xmouse+randomize(mWer.nOffsetX), mDummyMap._ymouse+randomize(mWer.nOffsetX));
    38.             mWer.filters = [];
    39.         }
    40.         aTempUnitsMoving = [];
    41.     }
    42. }
    43. function game() {
    44.     for (var a:String in aUnits) {
    45.         var mWer:MovieClip = aUnits[a];
    46.         if (mWer.ptZiel != null) {
    47.             var nDistX:Number = mWer.ptZiel.x-mWer._x;
    48.             var nDistY:Number = mWer.ptZiel.y-mWer._y;
    49.             var nDist = Math.sqrt((nDistX*nDistX)+(nDistY*nDistY));
    50.             mWer._x += nDistX*mWer.nTempo;
    51.             mWer._y += nDistY*mWer.nTempo;
    52.             if (Math.abs(Math.round(nDist))<=1) {
    53.                 trace("fertisch");
    54.                 mWer._x = mWer.ptZiel.x;
    55.                 mWer._y = mWer.ptZiel.y;
    56.                 mWer.ptZiel = null;
    57.             }
    58.         }
    59.     }
    60. }
    61. function randomize(pNum:Number):Number {
    62.     var nResult:Number = Math.round(Math.random()*(pNum*2)-pNum);
    63.     return nResult;
    64. }
    65. //-------------------- start ------------------
    66. init();
    Viel Spass
     
    #7      
x
×
×
teststefan