encarni10 escribió:
El codigo que yo utilice fue este
En el primer flame coloque esto para indicar las coordenadas iniciales del clip1
stop();
clip1inicioX = clip1._x;
clip1inicioY = clip1._y;
yo cree dos clip que asigne un nombre de instancia clip1 que es el que se arrastra y clip 2 al que permanece quieto
dentro del clip1 creo un boton y le asigno el siguiente codigo
on (press) {
startDrag("_root.clip1", true);}
on (release) {
stopDrag(); if (_root.clip1.hitTest(_root.clip2)) {
_root.clip1._x = _root.clip2._x;
_root.clip1._y = _root.clip2._y; }
else { _root.clip1._x = _root.clip1inicioX;
_root.clip1._y = _root.clip1inicioY;
}
}
y me sale estupendo pero y si tengo otros objetos por ejemplo ademas de un clip1 y clip2 tengo un clip3 y clip4 donde el clip3 encajaría dentro del clip4
intente modificar el codigo pero no lo consigo
gracias
Okay, veamos como te funciona con dos objetos, pero antes que nada te recomiendo unas cosas:
[*] Cuando programes, anida las cosas, esto es mas o menos asi:
Tu codigo:
Código ActionScript :
on (press) {
startDrag("_root.clip1", true);}
on (release) {
stopDrag(); if (_root.clip1.hitTest(_root.clip2)) {
_root.clip1._x = _root.clip2._x;
_root.clip1._y = _root.clip2._y; }
else { _root.clip1._x = _root.clip1inicioX;
_root.clip1._y = _root.clip1inicioY;
}
}
Mi codigo corrigiendo el tuyo:
Código ActionScript :
on (press) {
startDrag("_root.clip1", true);
};
on (release) {
stopDrag();
if (_root.clip1.hitTest(_root.clip2)) {
_root.clip1._x = _root.clip2._x;
_root.clip1._y = _root.clip2._y;
}
else {
_root.clip1._x = _root.clip1inicioX;
_root.clip1._y = _root.clip1inicioY;
};
};
Para todos los demas que leemos tu codigo, y para ti cuando te acostumbres, te va a ser mas facil localizar los errores.
[*] Y como plus adicional, si aprendes a comentar lo que haces, cuando vuelvas a revisar tu codigo sabras que hace cada cosa y no perderas tiempo descifrando que hiciste en esos If, else u en otras partes del codigo.
Ahora va mi posible solucion a tu problema:
Tenemos cuatro MC, a cada uno lo llamare para esta practica con un nombre diferente y facil de identificar
Objetos que se mueven: MC_Obj1, MC_Obj2
Objetos que detectan la colision: MC_Col1, MC_Col2
Aviso de que han colisionado: bien
Debo aclara que ninguno es boton, todos son movieClips y en total son cinco elementos
Codigo que va en el primer (y unico) frame:
Código ActionScript :
// --- MC_Obj1 colisiona con MC_Col1
// oculta el aviso de colision para que no sea visible al comienzo
bien._visible = false;
// Instruccion para arrastrar MC_Obj1 y traerlo al frente de todos los demas movieClips
MC_Obj1.onPress = function (){
MC_Obj1.swapDepths (totalDepth + 1);
startDrag (MC_Obj1);
};
// Instruccion para dejar de arrastrar MC_Obj1, verifica que haya colisionado con MC_Col1, y
// en caso de ser correcto despliega el aviso de colision hasta el frente de todos los demas movieClips
MC_Obj1.onRelease = function(){
stopDrag();
if (this.hitTest(MC_Col1)) {
bien._visible = true;
bien.swapDepths (totalDepth + 1);
}
// en caso de no haber colisionado con el objeto correcto el aviso de colision no sera mostrado
else {
bien._visible = false;
};
};
// --- MC_Obj2 colisiona con MC_Col2
// oculta el aviso de colision para que no sea visible al comienzo
bien._visible = false;
// Instruccion para arrastrar MC_Obj2 y traerlo al frente de todos los demas movieClips
MC_Obj2.onPress = function (){
MC_Obj2.swapDepths (totalDepth + 1);
startDrag (MC_Obj2);
};
// Instruccion para dejar de arrastrar MC_Obj2, verifica que haya colisionado con MC_Col2, y
// en caso de ser correcto despliega el aviso de colision hasta el frente de todos los demas movieClips
MC_Obj2.onRelease = function(){
stopDrag();
if (this.hitTest(MC_Col2)) {
bien._visible = true;
bien.swapDepths (totalDepth + 1);
}
// en caso de no haber colisionado con el objeto correcto el aviso de colision no sera mostrado
else {
bien._visible = false;
};
};
Segun yo, asi deberia quedar, pues asi lo tengo funcionando en mi FLA.