Antworten auf deine Fragen:
Neues Thema erstellen

Funktion mehrfach gleichzeitig ausführen?

Arceus

Gesperrt

Huhu,
ich möchte ein kleines Strategie Spiel machen und beim bewegen weniger Test Einheiten kommen schon die ersten Probleme:

Ich kann max. 1 Einheit gleichzeitig bewegen.
Hier mal die Funktion:
PHP:
// Bewegungsfunktion
var move_unit = function(instance:String, x_coord:Number, y_coord:Number, cosius_speed:Number) {;
    if(unit_selected != NULL) {
        var p:Point                                 = new Point(x_coord, y_coord);
        var dx:Number                         = p.x-_root[instance]._x;
        var dy:Number                         = p.y-_root[instance]._y;
        var RADIANS:Number                 = Math.atan2(dy, dx)/Math.PI*180;
        var DEGREES:Number                 = RADIANS*Math.PI/180;
        
        TweenLite.to(_root[instance], cosinus_speed, {_rotation:Math.round(RADIANS)});
        TweenLite.to(_root[instance], cosius_speed, {_x:x_coord, _y:y_coord,  _rotation:Math.round(RADIANS)});
    }
};

this.onMouseDown = function() {;
    move_unit(unit_selected, _xmouse, _ymouse, unit_selected_speed);
};

Hoffe ihr kennt eine Lösung =)
 

campman

Nicht mehr ganz neu hier

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:
 

Arceus

Gesperrt

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:

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:
this.onMouseDown = function() {;
    move_unit(unit_selected, _xmouse, _ymouse, unit_selected_speed);
};

Achja: Ich habe eben irgendwas gedrückt (In einem anderem File) und jetzt sieht mein Skript so aus:

Hilfe:eek: xD
 

campman

Nicht mehr ganz neu hier

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 ?;)
 

Arceus

Gesperrt

AW: Funktion mehrfach gleichzeitig ausführen?

Ja sie sollen sich alle gleichzeitig bewegen und hier, extra für dich =)
PHP:
// Imports
import flash.geom.Point;
import gs.TweenLite;


// Wichtige Variablen
var unit_selected:String                 = NULL;
var unit_selected_speed:Number        = NULL;

// Einheiten Spawn Funktion
var create_unit = function(init:String, instance:String, x_coord:Number, y_coord:Number) {;
    attachMovie(init,instance,this.getNextHighestDepth(),{_x:x_coord, _y:y_coord})
    _root[instance].onPress             = function() {;
        _root.unit_selected                 = instance;
        _root.unit_selected_speed     = 6;
        TweenLite.to(_root[instance], 0.4, {_alpha:70});
    };
    _root[instance].onEnterFrame     = function() {;
        if(unit_selected                     != instance) {
            TweenLite.to(_root[instance], 0.6, {_alpha:100});
        }
    };
};

// Bewegungsfunktion
var move_unit = function(instance:String, x_coord:Number, y_coord:Number, cosius_speed:Number) {;
    if(unit_selected != NULL) {
        var p:Point                                 = new Point(x_coord, y_coord);
        var dx:Number                         = p.x-_root[instance]._x;
        var dy:Number                         = p.y-_root[instance]._y;
        var RADIANS:Number                 = Math.atan2(dy, dx)/Math.PI*180;
        var DEGREES:Number                 = RADIANS*Math.PI/180;
        
        TweenLite.to(_root[instance], cosinus_speed, {_rotation:Math.round(RADIANS)});
        TweenLite.to(_root[instance], cosius_speed, {_x:x_coord, _y:y_coord,  _rotation:Math.round(RADIANS)});
    }
};

this.onMouseDown = function() {;
    move_unit(unit_selected, _xmouse, _ymouse, unit_selected_speed);
};

// Deselektierungsskript
var deselect:Object                                = new Object();
deselect.onKeyDown                                = function() {;
    if(Key.isDown(68)) {
        unit_selected                                = NULL;
        unit_selected_speed                        = NULL;
    }
};
Key.addListener(deselect);

create_unit("unit_1","unit_1",200,300);
create_unit("unit_1","unit_2",50,20);
create_unit("unit_1","unit_3",60,50);
 

h_seldon

Aktives Mitglied

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
 

h_seldon

Aktives Mitglied

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:
// -------------------- import ------------------
import flash.geom.Point;
import flash.filters.*;
// -------------------- vars ------------------
var mDummyMap:MovieClip, mUnit:MovieClip;
var aUnits:Array = [];
var aTempUnitsMoving:Array = [];
var ptZiel:Point;
var fGlow:GlowFilter;
//-------------------- functions ------------------
function init() {
	mDummyMap = this.createEmptyMovieClip("Spielfeld", this.getNextHighestDepth());
	mDummyMap.onEnterFrame = game;
	mDummyMap.onMouseDown = moveIt;
	fGlow = new GlowFilter(0x990000,100,5,5,2,1,true);
	createUnit("mcUnit1", "unit1", 200, 300, 0.1);
	createUnit("mcUnit1", "unit2", 50, 20, 0.1);
	createUnit("mcUnit1", "unit3", 60, 50, 0.1);	
}
function createUnit(pWer:String, pInstanz:String, pXPos:Number, pYPos:Number, pTempo:Number) {
	mUnit = mDummyMap.attachMovie(pWer, pInstanz, mDummyMap.getNextHighestDepth(), {_x:pXPos, _y:pYPos, nTempo:pTempo});
	aUnits.push(mUnit);
	mUnit.ptZiel = null;
	mUnit.nOffsetX = mUnit._width/2;
	mUnit.nOffsetY = mUnit._height/2;
	mUnit.onPress = function() {
		if (Key.isDown(Key.CONTROL)) {
			aTempUnitsMoving.push(this);
			this.filters = [fGlow];
		}
	};
}
function moveIt() {
	if (!Key.isDown(Key.CONTROL) && aTempUnitsMoving.length>0) {
		for (a in aTempUnitsMoving) {
			var mWer:MovieClip = aTempUnitsMoving[a];
			mWer.ptZiel = new Point(mDummyMap._xmouse+randomize(mWer.nOffsetX), mDummyMap._ymouse+randomize(mWer.nOffsetX));
			mWer.filters = [];
		}
		aTempUnitsMoving = [];
	}
}
function game() {
	for (var a:String in aUnits) {
		var mWer:MovieClip = aUnits[a];
		if (mWer.ptZiel != null) {
			var nDistX:Number = mWer.ptZiel.x-mWer._x;
			var nDistY:Number = mWer.ptZiel.y-mWer._y;
			var nDist = Math.sqrt((nDistX*nDistX)+(nDistY*nDistY));
			mWer._x += nDistX*mWer.nTempo;
			mWer._y += nDistY*mWer.nTempo;
			if (Math.abs(Math.round(nDist))<=1) {
				trace("fertisch");
				mWer._x = mWer.ptZiel.x;
				mWer._y = mWer.ptZiel.y;
				mWer.ptZiel = null;
			}
		}
	}
}
function randomize(pNum:Number):Number {
	var nResult:Number = Math.round(Math.random()*(pNum*2)-pNum);
	return nResult;
}
//-------------------- start ------------------
init();

Viel Spass
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.616
Beiträge
1.538.359
Mitglieder
67.536
Neuestes Mitglied
QuestionMark
Oben