Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

junior.c.e

Desafio no flash e AS2.0

Recommended Posts

Ola galera do imasters.

Bom vim buscar ajuda que na verdade é um problemão e desafio para quem manja de flash AS2.0. Vamos ao problema.

Tenho uma animação em as2.0 onde os usuários pintam, aplicam texturas e modificam como desejar vários objetos.

Bom devido a grande quantidade de objetos que existe nesta animação eu gostaria que os objetos ficassem externamente e só fossem carreados quando os usuários escolherem, ou seja, através da técnica loadmovie. Esta necessidade é para que a animação fique mais leve.

Galera usar a técnica loadmovie para carregar os objetos externos eu sei como fazer, mas tive um problemão que vem a ser o grande desafio, que é o seguinte.

Para que eu consiga deixar os objetos externos, estou tendo que deixar os codgos que aplicam as texturas em cada objeto que é carregado, caso contrario não funciona. O problema é que esta não é uma técnica muito boa, primeiro porque ficar repetindo codgo não é a melhor saída alem de que para controlar, corrigir ou incrementar se torna um problema muito grande, pois cada vez que preciso fazer tenho que ir em cada objeto, imaginem que eu tenha cem tipos de objetos , seria um problemão para atualizar.

Basicamente preciso que fique estruturado da seguinte forma.

Tenho uma única estrutura com os action necessários para aplicar as cores e texturas que recebe os objetos externos.

Este são os codgos que estou usando:

import flash.geom.ColorTransform;
import flash.geom.Transform;

var cores:Array = new Array("0x0000C0","0x00A060","0xFFFF60","0xFF0000","0x000000","0xFFFFFF");
var corSelect = "0xFFFFFF";
var totalObjetos = 4;
var corAnt:Array = new Array(); 


var id_fig:Number; //variável irá armazenar o número final do nome do botão da textura escolhida

for (i = 0; i<cores.length; i++) {
pintaObj(_root.paleta["cor"+i], cores[i]);//O mc "paleta" que é o movieclip pai dos mc botões de cores
_root.paleta["cor"+i].id = i;
_root.paleta["cor"+i].onPress = function() {
	corSelect = cores[this.id];
}
}

paleta.fig1.onPress = function() {//O mc "paleta" que é o movieclip pai dos mc botões de texturas
corSelect = "";
id_fig = this._name.slice(this._name.length-1, this._name.length);//pego o último caracter do nome "fig1", ou seja, o nº 1
}
paleta.fig2.onPress = function() {
corSelect = "";
id_fig = this._name.slice(this._name.length-1, this._name.length);//pego o último caracter do nome "fig2", ou seja, o nº 2
}
//=========================================================================

for (j=0; j<totalObjetos; j++) {
_root["mc"+j].grade = false;
_root["mc"+j].onPress = function() {
	startDrag(this, false);
	this.swapDepths(_root.getNextHighestDepth());
	if (corSelect != "") {
		if (!this.grade) {
			pintaObj(this, corSelect);
			corAnt.push(this);
		} else {
			removeMovieClip(this.container);
			this.grande =  false;
			pintaObj(this, corSelect);
			corAnt.push(this);
		}
	} else {
		preencheFig(this);
		corAnt.push(this);
	}
	objSelect = this;
}
_root["mc"+j].onRelease = function() {
	stopDrag();
}
}


function pintaObj(mc, cor) {
var color_obj:ColorTransform = new ColorTransform(mc.fundo);
var trans_obj:Transform = new Transform(mc.fundo);
color_obj.rgb = cor;
trans_obj.colorTransform = color_obj
}

bt_duplica.onRelease = function() {
var d:MovieClip = objSelect.duplicateMovieClip("mc"+totalObjetos, _root.getNextHighestDepth());
d.grade = false;
totalObjetos++;
d._x += 15;
d._y += 15;
d.onPress = function() {
	startDrag(this, false);
	this.swapDepths(_root.getNextHighestDepth());
	if (corSelect != "") {
		if (!this.grade) {
			pintaObj(this, corSelect);
			corAnt.push(this);
		} else {
			removeMovieClip(this.container);
			this.grande =  false;
			pintaObj(this, corSelect);
			corAnt.push(this);
		}
	} else {
		preencheFig(this);
		corAnt.push(this);
	}
	objSelect = this;
}
d.onRelease = function() {
	stopDrag();
}
}

function preencheFig(mc) {
mc.createEmptyMovieClip("container", 0);
mc.container._x = mc.container._y = 0;
mc.container.attachMovie("mc_fig"+id_fig, "mc_fig", 0); //quando attach o objeto da biblioteca, acrescente "+id_fig", para saber qual das texturas serão inseridas no movieclip.
mc.container.mc_fig._xscale = mc.container.mc_fig._yscale = 50;
mc.container.mc_fig._x = mc.container.mc_fig._y = 0;
var largura = mc._width;
var altura = mc._height;
var qtde = Math.ceil(largura/mc.container.mc_fig._width);
for (i=0; i<(qtde*qtde); i++) {
	var fig:MovieClip = mc.container.mc_fig.duplicateMovieClip("fig"+i, i+1);
	fig._x = (i%qtde)*(fig._width+0)+mc.container._x;
	fig._y = Math.floor(i/qtde)*(fig._height+0)+mc.container._y;
}
mc.container.setMask(mc.fundo);
removeMovieClip(mc.container.mc_fig);
mc.grade = true;
}

bt_remove.onPress = function() {
objSelect.swapDepths(_root.getNextHighestDepth());
removeMovieClip(objSelect);
}

var Desfazer:Object = new Object();
Desfazer.onKeyDown = function() {
if (Key.isDown(Key.CONTROL) && Key.isDown(90)) {//código 90 representa a letra "Z".
	if (corAnt.length > 0) {
		removeMovieClip(corAnt[corAnt.length-1].container);
		pintaObj(corAnt[corAnt.length-1],  cores[cores.length-1]);
		corAnt.splice(corAnt.length-1, 1);
	}
}
}
Key.addListener(Desfazer);

 

Galera acredito que este é um desafio mesmo, pois já tentei de varias formas e não obtive resultados, sendo que não funcionando a função aplica texturas se os codgos somente em um lugar. Bom alguns programadores me passaram que é algo impossível, mas acredito que deve ter alguma saída para esta situação.

 

Se alguém souber como sair deste problema me ajuda galera.

 

Abraço Junior

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.