Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-03-2008, 19:27   #1 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
punkte erzeugen

hi,
habe hier folgendes (verständnis-)problem. möchte im endeffekt die möglichkeit haben per knopfdruck einen punkt zu erzeugen (beliebige lage). ich habe leider keine ahnung wie man zur laufzeit überhaupt objekte erzeugt. nach längerer suche hier bin ich dabei auf attachmovie gestoßen. allerdings sind die probleme die in den threads diskutiert werden viel zu kompliziert. kann mir einer evtl die attachmovie funktion näher erläutern?

bisher sieht das ganze so aus, wobei punkt eben der mc mit dem punkt ist und cr ein leerer mc.
Code:
function punkt(x, y){
	this.x = x;
	this.y = y;
	this.clip = cr.attachMovie("punkt", "punkt", 1);
	}

punkt1 = new punkt(120, 140);
egal, welche x, y koordinaten ich eingebe, der punkt entsteht immer im koordinatenursprung. was mach ich da falsch?
danke schonmal für die hilfe
swiged ist offline   Mit Zitat antworten
Alt 05-03-2008, 20:28   #2 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
PHP-Code:
punkt1 = new punkt(120140); 
Das ist eigentlich ein Klassenaufruf, kein Funktionsaufruf.
Hätte nicht gedacht, dass das überhaupt funktionieren kann.

PHP-Code:
function punkt(xy){
    var 
t:MovieClip cr.attachMovie("punkt""punkt"cr.getNextHighestDepth());
t._x x;
t._y y;
    }

punkt(120140); 
__________________
we will stop enhancing the truth in 3, 2, ...

Geändert von SpecOps-12 (05-03-2008 um 20:29 Uhr)
SpecOps-12 ist offline   Mit Zitat antworten
Alt 05-03-2008, 21:24   #3 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Zitat:
Zitat von Weidler Beitrag anzeigen
Das ist eigentlich ein Klassenaufruf, kein Funktionsaufruf.
Hätte nicht gedacht, dass das überhaupt funktionieren kann.
Dann solltest du dir mal das Märchen von __proto__ und den sieben prototypes durchlesen

Hier wäre der (AS1!) klassenbasierte (und dennoch dirty) Ansatz:
PHP-Code:
function punkt(xy){
    
this.x;
    
this.y;
    
this.clip cr.attachMovie("punkt""punkt"1);
        
this.clip._x x;
        
this.clip._y y;
    }

punkt1 = new punkt(120140); 
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 05-03-2008, 23:38   #4 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
vielen dank für die flotte antwort. jetzt häng ich leider an ner anderen stelle, kurz hinter der ersten. ich kann jetzt also die einzelnen punkte erzeugen, aber kann ich diese denn auch einzeln ansprechen, also hat jeder einen eigenen namen?

quader ist hier für punkt eingesprungen. quad erstellt einen quader. habe versucht über ne zählvariable an einzelne identitäten zu kommen, klappt leider nicht ganz.
Code:
i=0;
function quad(x, y){
    var t:MovieClip = cr.attachMovie("quader", "quader"+i, cr.getNextHighestDepth());
t._x = x;
t._y = y;
i+=1;
    }
quader.onPress = function() {
    startDrag(this);
};
quader.onRelease = function() {
    stopDrag();
};
g=0;
this.onEnterFrame = function(){
button.onPress = function() {
	quad (0,g);
	g+=45;
	};
	//trace(g);
};
im endeffekt soll jeder dieser erstellten quader frei beweglich sein. aber das scheint eben abhängig zu sein von den identitäten.
gruß,
swiged

EDIT: wenn ich es mit cr.onPress versuche, dann kann ich die ganze quaderreihe bewegen

Geändert von swiged (05-03-2008 um 23:40 Uhr)
swiged ist offline   Mit Zitat antworten
Alt 06-03-2008, 00:51   #5 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.649
-> Verschoben nach ActionScript 1
__________________
[ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ]

devboy.org
b.asile ist offline   Mit Zitat antworten
Alt 06-03-2008, 08:04   #6 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Zitat:
Zitat von Janoscharlipp Beitrag anzeigen
Dann solltest du dir mal das Märchen von __proto__ und den sieben prototypes durchlesen
Hab ich gestern mal im Moock gemacht. Ganz erstaunlich.
Jetzt raff ich auch mal, was das mit den Prototypen immer gesollt hat, das hab ich ja immer einfach ignoriert, wenn's irgendwo aufgetaucht ist
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 06-03-2008, 16:28   #7 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
hat keiner ne idee? oder ist das der ganz falsche ansatz? falls ja, wie könnte man das denn sonst lösen?

gruß,
swiged
swiged ist offline   Mit Zitat antworten
Alt 06-03-2008, 16:48   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Code:
g = 0;
//
button.onPress = function() {
	g += 45;
	quad(30, g);
};
//
function quad(x, y) {
	var i = _root.getNextHighestDepth();
	var _mc = _root.attachMovie("quader", "quader"+i, i);
	_mc._x = x;
	_mc._y = y;
	_mc.onPress = function() {
		trace(this);
		startDrag(this);
	};
	_mc.onRelease = function() {
		stopDrag();
	};
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (06-03-2008 um 16:51 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 06-03-2008, 17:16   #9 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
vielen dank, jetzt gehts. aber dann ist ja alles was ich falsch gemacht hab, dass i und nexthighestdepth nicht gleich waren
Code:
 var t:MovieClip = cr.attachMovie("quader", "quader"+i, cr.getNextHighestDepth());
und die drag befehle in den konstrukter zu setzen ist natürlich ne gute idee
nun frage ich mich aber leider immer noch wie ich die einzelnen kisten ansprechen kann. die werte der aktuellen kiste kann ich mir ja holen(_mc.x _mc.alpha etc) aber wie komme ich an die einzelnen werte?

gruß, swiged
swiged ist offline   Mit Zitat antworten
Alt 06-03-2008, 17:34   #10 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
na, mit
PHP-Code:
this["quader"+i]; 
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 06-03-2008, 18:15   #11 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
leider nicht wirklich,
habe nun mehrere versionen ausprobiert, das beste ergebnis wird erzielt mit
PHP-Code:
trace(t[quader2]._x); 
, wobei t hier der der erstellte mc ist. das selbe ergebnis erziele ich aber auch wenn ich cr[quader2]._x angebe. ergebnis ist da auch etwas viel gesagt. wenn ich wie hier die x-koordinate trace (in onEnterFrame) dann steht da zu beginn "undefined". macht sinn, weil ja quader 2 noch garnicht da ist. klickt man 3 mal auf den button und erstellt somit 3 kisten, wird aus "undefined" eine "0". sehr gut, zumal die x-koordinate von quader2 zu diesem zeitpunkt auch noch "0" ist. aber wenn ich quader2 dann packe und verschiebe, bleibt im trace leider die "0" stehen.

gruß,
swiged
swiged ist offline   Mit Zitat antworten
Alt 06-03-2008, 18:29   #12 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
aaaaalso
wenn du dein clip so esrstellst (ohne jeglichen anderen code)
PHP-Code:
var t:MovieClip cr.attachMovie("quader""quader"+icr.getNextHighestDepth()) 
dann ist doch logish dass da undefinde bei raus kommen muss...
denn "i" ist nirgdens deklariert


wenn du deine isntanzen so erstellst:

PHP-Code:
var i:Number 0;
for (;
i<5;i++){
var 
t:MovieClip cr.attachMovie("quader""quader"+icr.getNextHighestDepth());

kann kannst du die instanzen mit NUR innerhalb der for schlaufe ansprechen, da diese eine temporäre variable ist und jeden durchlauf überschrieben wird....
__________________
gruß bloba

2 x onkel² b_d

Geändert von bloba (06-03-2008 um 18:30 Uhr)
bloba ist offline   Mit Zitat antworten
Alt 06-03-2008, 19:09   #13 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
ich glaube wir haben aneinander vorbeigeredet, aber jetzt hab ichs endlich hinbekommen.

PHP-Code:
g=0;
this.onEnterFrame = function(){
button.onPress = function() {
    
quad (0,g);
    
g+=45;
    };
     
trace(quader2._x);
};

function 
quad(xy){
     
_root.getNextHighestDepth();
     
_root.attachMovie("quader""quader"+ii);
t._x x;
t._y y;
t.onPress = function() {
    
startDrag(this);
};
t.onRelease = function() {
    
stopDrag();
};

    }; 
swiged ist offline   Mit Zitat antworten
Alt 07-03-2008, 02:15   #14 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
wie auch immer, mit deinem onEnterFrame definierst du 30mal je sekunde dein button.onPress neu. lass das onEnterFrame weg!
Code:
this.onEnterFrame = function() {
	button.onPress = function() {
		quad(0, g);
		g += 45;
	};
	trace(quader2._x);
};
trace(quader2._x);
entspricht
_root["quader"+i]._x; // wenn quader2 auf _root liegt. ansonsten den richtigen pfad angeben.

und du kannst z.b. deine mc's in einem array sammeln. z.b. so:
Code:
g = 0;
quader_array = new Array();
//
button.onPress = function() {
	quader_array.push(quad(0, g));
	g += 45;
	//
	trace(quader_array[quader_array.length-1]);
};
function quad(x, y) {
	var i = _root.getNextHighestDepth();
	var t = _root.attachMovie("quader", "quader"+i, i);
	t._x = x;
	t._y = y;
	t.onPress = function() {
		startDrag(this);
	};
	t.onRelease = function() {
		stopDrag();
	};
	return t;
}
und mit einem fortlaufenden i geht das natürlich auch
cr.attachMovie
habe das in meinem beispiel weggelassen, weil ich nicht weiss, woher du das cr hast.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (07-03-2008 um 02:20 Uhr)
hgseib 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 03:07 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele