Positionierung eines MC per AS Part II (MX)

TyronD

Grünschnabel
Hallo,
so weit so gut leider konnte mir keiner weiter Helfen,
bin der Lösung trotzdem näher gekommen bzw. habe
das problem geschickt umschifft.

Der Code sieht jetzt wie folgt aus:

Code:
on (release) {
_root.rmask._x = 200;
_root.lmask._x = 145;
}

Allerdings sieht der Sprung des MC
jetzt wenig Elegant aus.
In wie weit muss ich den Code verändern,
das der MC nicht zu Position Springt sondern Fährt (gleitet)?

Vielen Dank im Vorraus
greetz Tyron
 
Zuletzt bearbeitet:
Gleiten ist da schon ne Ecke schwieriger.
Ganz handlich zu benutzen ist z.B. dieses Skript.
Einfach das hier in den 1.Frame oder irgendwo wo es auf jeden Fall ganz am Anfang geladen wird:
PHP:
MovieClip.prototype.moveThis = function (to_x,to_y,speed){
	this.createEmptyMovieClip('looper', 99).onEnterFrame = function() {
		if(_data.start_x==null){
			_data = new Object();
			_data.start_x=this._parent._x;
			_data.start_y=this._parent._y;
			_data.difference_x = Math.abs(_data.start_x - to_x)/speed;
			_data.difference_y = Math.abs(_data.start_y - to_y)/speed;
		}
		if (_data.loop_index >= speed){
			delete(_data); unloadMovie(this);
		}else{
			if(_data.start_x > to_x){
				this._parent._x = this._parent._x - _data.difference_x
			}else{
				this._parent._x = this._parent._x + _data.difference_x
			}
			if(_data.start_y > to_y){
				this._parent._y = this._parent._y - _data.difference_y
			}else{
				this._parent._y = this._parent._y + _data.difference_y
			}
			_data.loop_index++;	
		}
	}
}
Und der Aurfuf sieht dann so aus:
PHP:
on (release) {
	_root.rmask.moveThis(200,145,25);		
}
 
Hi,

dank dir,
daher habe ich so lange auf meine Antwort warten müssen.
Nun, würdest du mir vieleicht auch Helfen das Skript zu Verstehen?!

Also grob ist es mir klar,
du derklarierst bzw. schreibst eine Funktion Namens "movethis"
und setzt Sie dann entschprechend ein. So weit ist es klar.
Aber was bedeuten die drei Zahlen in Klammern (Position?)
und wie funktioniert die Funktion? Speziel der Data Befehl ist mir Fremd?


Vielen Dank im Vorraus
greet z Tyron
 
Abend,

PHP:
vieClip.prototype.moveThis = function (to_x,to_y,speed)
Beim "Erstellen" von Funktionen kann man zwischen den Klammern Parameter in die eigentliche Funktion übergeben. Hier sind es xZielwert, yZielwert und die Geschwindigkeit.
PHP:
_data = new Object();
_data ist kein Befehl sondern ein erzeugtes Objekt. Eine Art Ablage/Container in welchem man Variablen definieren und Funktionen als Methoden erstellen/nutzen kann. Um dieses Thema zu verstehen solltest du dich mit objektorientierter Programmierung beschäftigen (auch OOP genannt.)

_keen!
 
Hi und vielen Dank an euch beiden,

so weit ist es mir klar, funtioniert auch Super,
allerdings nur bei einem MC wenn ich die Funktion auf
zwei MC anwende scheint sich irgendetwas zu kreuzen
und die Positionierung klapt nicht mehr einwandfrei.

Was ist zu tun?

Muss ich die komplette Funktion noch mal schreiben unter einem anderen Namen, wie z.B. >>moveThis2<< oder so ?


greetz Tyron
 
PHP:
MovieClip.prototype.moveThis = function (to_x,to_y,speed){
	rd = random(99)+10
    this.createEmptyMovieClip('looper'+rd, rd).onEnterFrame = function() {
        if(_data.start_x==null){
            _data = new Object();
            _data.start_x=this._parent._x;
            _data.start_y=this._parent._y;
            _data.difference_x = Math.abs(_data.start_x - to_x)/speed;
            _data.difference_y = Math.abs(_data.start_y - to_y)/speed;
        }
        if (_data.loop_index >= speed){
            delete(_data); unloadMovie(this);
        }else{
            if(_data.start_x > to_x){
                this._parent._x = this._parent._x - _data.difference_x
            }else{
                this._parent._x = this._parent._x + _data.difference_x
            }
            if(_data.start_y > to_y){
                this._parent._y = this._parent._y - _data.difference_y
            }else{
                this._parent._y = this._parent._y + _data.difference_y
            }
            _data.loop_index++;    
        }
    }
}

So geht´s auch mit mehreren Aufrufen gleichzeitig.
Die alte Funktion erstellt einen Movieclip in _level 99 der die gefragte Aktion koordiniert und sich danach selbst löscht.
Wenn direkt danach ein weiterer Movieclip in _level 99 erstellt wird, wird der alte überschrieben.

Diese Funktion erstellt den Movieclip jetzt in einem immer anderen _level ( random(99)+10 -> ein zufälliges _level von 10 - 109 )

Falls du die Funktion mehr als 10 bis 20 mal gleichzeitig aufrufen willst, sollte man die Zufallszahl (99) erhöhen oder sich was anderes ausdenken, das dafür sorgt, dass es nicht dazu kommt, das 2 Movieclips im selben _level erstellt werden.
 
Hmmm,

die Idee leuchtet mir ein alleridngs,
scheint es immer noch nicht zu funktionieren,
kann es sein das ein zweites, definiertesLevel, besser wäre als ein random Level?

Ich habe die Datei nun mal angehnagen vieleicht übersehe ich was.
Ansonsten denke ich mit einer zweiten unabhängigen Funktion würde es Funktionieren?!

Test


greetz Tyron
 
Zuletzt bearbeitet:
Zurück