Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-05-2004, 17:49   #1 (permalink)
Neuer User
 
Registriert seit: May 2004
Beiträge: 25
Linien bewegen

Hallo miteinander.
Gleich zu Beginn: Ich bin absoluter Flash Anfänger - also jeder Tip ist mehr als willkommen

Ich habe folgendes Problem:
Es geht darum dass auf einem Feld (600x400px) etwa 10 dünne und 1 dicke Linie dargestellt werden soll.

Wenn man dorthin klickt, wo die dicke Linie ist, so sollen die restlichen Linien nach rechts wandern (und am rechten Rand verschwinden).

In einem anderen forum hat mir bereits eine sehr freundliche Person geholfen und daher habe ich jetzt folgendes:

Code:
MovieClip.prototype.bewegen = function(speed, xMin, xMax) {
	trace(speed);
	this.onEnterFrame = function() {
		if (this._x>=xMax) {
			delete this.onEnterFrame;
			// speed = 0 is nich so doll, da die funktion 
			//sonst ständig weiter aufgerufen wird
		} else {
			if (this._x<=xMin) {
				delete this.onEnterFrame;
			}
		}
		this._x += speed;
	};
};


createThinLine = function (x1, y1, x2, y2, thickness, id) {
	_root.createEmptyMovieClip("line"+id, id);
	with (_root["line"+id]) {
		lineStyle(thickness, 0x000000, /*Math.random()*100*/100);
		moveTo(x1, y1);
		lineTo(x2, y2);
		_x = x1;
        _y = y1; 
	}
};
createThickLine = function (x1, y1, x2, y2, thickness, id) {
	_root.createEmptyMovieClip("Tline"+id, id);
	with (_root["Tline"+id]) {
		lineStyle(thickness, 0x000000, 100);
		moveTo(x1, y1);
		lineTo(x2, y2);
		_x = x1;
        _y = y1; 
	}
};

drawFineLines = function () {
	for (i=0; i<10; i++) {
		xKoord = Math.floor(Math.random()*600);
		trace("i: " + xKoord);
		createThinLine(xKoord, 0, xKoord, 400, 3, i);
	}
};

drawThickLines = function () {
	createThickLine(200, 0, 200, 400, 10, 1);
};

drawFineLines();
drawThickLines();

onMouseDown = function () {
	if ((_xmouse>195) && (_xmouse<205)) {
		for (i=0; i<11; i++) {
		// trace(_root["line"+i]._x);
			_root["line"+i].bewegen(5, 0, 600);
		}
	}
};

createThinLine(1,10,1,300,1,100);
createThinLine(0,0,600,400,1,300);

stop();
Dieser Code hat jedoch ein paar Fehler:

1.) es werden nicht alle Linien angezeigt (warum?)

2.) die dicke Linie sollte eigentlich bei einem x-wert von 200 sein, sie ist aber bei etwa 400. Wenn man auf sie klickt, passiert nichts, klickt man aber dorthin wo sie eigentlich sein sollte (bei 200px vom linken Rand aus) so funktioniert das Bewegen.

Könnt ihr mir hier evtl. weiterhelfen und mir vielleicht einen Hinweis geben, wo der Fehler liegt ?
somnatic ist offline   Mit Zitat antworten
Alt 27-05-2004, 18:23   #2 (permalink)
Gib her, ich mach das!
 
Registriert seit: Jul 2003
Ort: Karlsruhe/Kassel
Beiträge: 270
Deine Linien kommen sich beim erstellen mit der Tiefenverwalten in die Quere.
Du solltest als erstes, also noch vor dem MovieClip.protoype das hier einfügen:
var depth=0;
Und dann in den Funktionen drawFineLines und DrawThickLines jeweils den letzten Parameter der in der for-Schleife aufgerufenen Funktion (also i buw. 1) durch depth++ ersetzen.
Vielleicht klärt sich dann auch dein zweites Problem.
Dr.Atom ist offline   Mit Zitat antworten
Alt 27-05-2004, 18:39   #3 (permalink)
Neuer User
 
Registriert seit: May 2004
Beiträge: 25
hmm .. hat irgendwie nicht ganz geholfen .. Immer noch dieselben Probleme

hier der aktualisiertere Code

Code:
var depth=0;

MovieClip.prototype.bewegen = function(speed, xMin, xMax) {
	trace(speed);
	this.onEnterFrame = function() {
		if (this._x>=xMax) {
			delete this.onEnterFrame;
			// speed = 0 is nich so doll, da die funktion 
			//sonst ständig weiter aufgerufen wird
		} else {
			if (this._x<=xMin) {
				delete this.onEnterFrame;
			}
		}
		this._x += speed;
	};
};


createThinLine = function (x1, y1, x2, y2, thickness, id) {
	_root.createEmptyMovieClip("line"+id, id);
	with (_root["line"+id]) {
		lineStyle(thickness, 0x000000, /*Math.random()*100*/100);
		moveTo(x1, y1);
		lineTo(x2, y2);
		_x = x1;
        _y = y1; 
	}
};
createThickLine = function (x1, y1, x2, y2, thickness, id) {
	_root.createEmptyMovieClip("Tline"+id, id);
	with (_root["Tline"+id]) {
		lineStyle(thickness, 0x000000, 100);
		moveTo(x1, y1);
		lineTo(x2, y2);
		_x = x1;
        _y = y1; 
	}
};

drawFineLines = function () {
	for (i=0; i<10; i++) {
		xKoord = Math.floor(Math.random()*600);
		trace("i: " + xKoord);
		createThinLine(xKoord, 0, xKoord, 400, 3, depth++);
	}
};

drawThickLines = function () {
	createThickLine(200, 0, 200, 400, 10, depth++);
};

drawFineLines();
drawThickLines();

onMouseDown = function () {
	if ((_xmouse>195) && (_xmouse<205)) {
		for (i=0; i<11; i++) {
		// trace(_root["line"+i]._x);
			_root["line"+i].bewegen(5, 0, 600);
		}
	}
};

createThinLine(1,10,1,300,1,100);
createThinLine(0,0,600,400,1,300);

stop();
somnatic ist offline   Mit Zitat antworten
Alt 28-05-2004, 12:52   #4 (permalink)
Neuer User
 
Registriert seit: May 2004
Beiträge: 25
wen's interessiert.
Die Lösung ist eigentlich recht einfach.

Ich erstelle eine movieclip und zeichne in dieses an das Koordinaten - Paar (200,0) eine Linie ..
Nun verschiebe dich das Ganze (_x=x1) nach rechts um 200 px

natürlich ist nun alles nach rechts verschoben.

Wenn ich die Linie an die Stelle 0/0 des Movieclips zeichne und danach den Movieclip verschiebe kann ich sowohl die Position der Linie richtig auslesen als dass sie auch an der richtigen Stelle ist
somnatic 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 19:34 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele