Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    drag & drop onClipEvent()

    Ciao a tutti! sto sviluppando un gioco in flash basato sul drag&drop modificando uno script che ho trovato su un libro. 5 oggetti devono esser rilasciati in 5 punti predefiniti (in realtà il punto arrivo è un solo mc e la posizione di ogni oggetto e calcolata in base al punto di registrazione). utilizzando onClipEvent(); il codice sta su un mc vuoto all'esterno dello stage. Lo script funziona correttamente solo che vorrei che gli oggetti rilasciati nel posto sbagliato ritornassero al punto di partenza, ho provato ad aggiungere una parte di codice (vedi commenti) che funziona in parte nel senso che rilasciando un oggetto che nn soddisfa hitTest() questo si sposta solo che non finisce mai al posto di partenza... ho provato a metter delle azioni di trace per vedere se i risultati di "prelevo" e "appoggio" coincidono. ed effettivamenti i risultati sono gli stessi perchè l'obj si sposta nel punto sbagliato?

    se non mi son spiegato vi carico il fla su un server...

    plz help!

    thnks//k01

    codice:
    onClipEvent (mouseDown) {
    	// prendo la posizione del mouse
    	my_x = _root._xmouse;
    	my_y = _root._ymouse;
    	startPieceX = my_x;
    	startPieceY = my_y;
    	trace("prelevo"+startPieceX);
    	trace("prelevo"+startPieceY);
    
    	// ciclo tra i pezzi cercando l'hit
    	for (x=0; x<6; x++) {
    		for (y=0; y<4; y++) {
    			piece = _root[x+"-"+y];
    
    			//cerco controllo se c'è un pezzo sotto il cursore e se non è gia stato posizionato
    			if (piece.hitTest(my_x, my_y) and (piece._alpha<100)) {
    				// inizio il drag
    				piece.startDrag();
    
    				// uscita dal ciclo
    				x = 6;
    				y = 4;
    				break;
    			}
    		}
    	}
    }
    
    onClipEvent (mouseUp) {
    	// stop drag
    	stopDrag();
    
    	// calcolo la distanza del centro del pezzo dal centro dell'outline
    
    	dx = _root.outline._x-piece._x;
    	dy = _root.outline._y-piece._y;
    	dist = Math.sqrt(dx*dx+dy*dy);
    
    	// se abbastanza vicino lo posiziono correttamente
    	if (dist<10) {
    		piece._x = _root.outline._x;
    		piece._y = _root.outline._y;
    
    		// rimettendo l'alpha a 100 blocco il pezzo
    		piece._alpha = 100;//QUESTA è LA MIA AGGIUNTA
    	} else { //se non è abbastanza vicino alla posizione lo rimetto al posto di partenza
    		piece._x = startPieceX;
    		piece._y = startPieceY;
    		trace("appoggio"+startPieceX);
    		trace("appoggio"+startPieceY);
    	}
    }

  2. #2
    che scemo.... ho capito solo ora... la differenza dipende dal punto di registrazione dei singoli oggetti che differisce dal centro di ogni oggetto per aderire alla base di appoggio. quando prendo il singolo oggetto il punto iniziale viene preso su x_ e y_mouse mentre quando viene rilasciato questi valori vengono applicati al punto di registraione dell'oggetto.

    altra domandeìa a questo punto è possibile prendere la posizione del punto di registrazione invece che quella del mouse?

  3. #3
    ok ci son riuscito andava solo spostata la parte di script che prendeva il punto di registrazione

    così:

    onClipEvent (mouseDown) {
    // prendo la posizione del mouse
    my_x = _root._xmouse;
    my_y = _root._ymouse;
    startPieceX = piece._x;
    startPieceY = piece._y;
    trace("prelevo"+startPieceX);
    trace("prelevo"+startPieceY);

    // ciclo tra i pezzi cercando l'hit
    for (x=0; x<6; x++) {
    for (y=0; y<4; y++) {
    piece = _root[x+"-"+y];

    //cerco controllo se c'è un pezzo sotto il cursore e se non è gia stato posizionato
    if (piece.hitTest(my_x, my_y) and (piece._alpha<100)) {
    // inizio il drag
    piece.startDrag();
    startPieceX = piece._x;
    startPieceY = piece._y;
    trace("prelevo"+startPieceX);
    trace("prelevo"+startPieceY);

    // uscita dal ciclo
    x = 6;
    y = 4;
    break;
    }
    }
    }
    }

    onClipEvent (mouseUp) {
    // stop drag
    stopDrag();

    // calcolo la distanza del centro del pezzo dal centro dell'arrivo

    dx = _root.arrivo._x-piece._x;
    dy = _root.arrivo._y-piece._y;
    dist = Math.sqrt(dx*dx+dy*dy);

    // se abbastanza vicino lo posiziono correttamente
    if (dist<10) {
    piece._x = _root.arrivo._x;
    piece._y = _root.arrivo._y;

    // rimettendo l'alpha a 100 blocco il pezzo
    piece._alpha = 100;
    } else {//se non è abbastanza vicino alla posizione lo rimetto al posto di partenza
    piece._x = startPieceX;
    piece._y = startPieceY;
    trace("appoggio"+startPieceX);
    trace("appoggio"+startPieceY);
    }
    }

  4. #4
    rieccomi... purtroppo ho cantato vittoria troppo presto. devo riuscire a calcolare quando gli oggetti sono stati messi tutti al posto giusto solo che nn riesco a capire come inserire le istruzioni all'interno di onMouseEvent()... qualcuno ha idea di come si può fare....(?)

  5. #5
    risolto di nuovo... giuro che da ora in poi asp almeno mezza giornata prima di postare dei probl.... se ha qual può interessare cmq ecco il codice completo

    questo è associato ad un mc (a caso) sullo stage
    codice:
    onClipEvent (mouseDown) {
    	// prendo la posizione del mouse
    	my_x = _root._xmouse;
    	my_y = _root._ymouse;
    	/*trace("prelevo"+startPieceX);
    	trace("prelevo"+startPieceY);*/
    
    	// ciclo tra i pezzi cercando l'hit
    	for (x=0; x<6; x++) {
    		for (y=0; y<4; y++) {
    			piece = _root["my_"+x+"_"+y];
    
    			//cerco controllo se c'è un pezzo sotto il cursore e se non è gia stato posizionato
    			if (piece.hitTest(my_x, my_y) && (piece._alpha<100)) {
    				// inizio il drag
    				piece.startDrag();
    				startPieceX = piece._x;
    				startPieceY = piece._y;
    				/*trace("prelevo"+startPieceX);
    				trace("prelevo"+startPieceY);
    				trace(piece);*/
    
    				// uscita dal ciclo
    				x = 6;
    				y = 4;
    				break;
    			}
    		}
    	}
    }
    
    onClipEvent (mouseUp) {
    	// stop drag
    	stopDrag();
    
    	// calcolo la distanza del centro del pezzo dal centro dell'arrivo
    
    	dx = _root.arrivo._x-piece._x;
    	dy = _root.arrivo._y-piece._y;
    	dist = Math.sqrt(dx*dx+dy*dy);
    
    	// se abbastanza vicino lo posiziono correttamente
    	if (dist<50) {
    		piece._x = _root.arrivo._x;
    		piece._y = _root.arrivo._y;
    		
    		// rimettendo l'alpha a 100 blocco il pezzo
    		piece._alpha = 100;
    		_root.countObj++;
    		trace(_root.countObj);
    	} else {//se non è abbastanza vicino alla posizione lo rimetto al posto di partenza
    		piece._x = startPieceX;
    		piece._y = startPieceY;
    		/*trace("appoggio"+startPieceX);
    		*/
    	}
    	if (_root.countObj == 5) {
    	_root.gotoAndPlay("nextGame");
    	clearInterval(_root.timer);
    	}
    }
    questo invece è sulla root dove istanzio le variabili e il counter del tempo

    codice:
    stop();
    var countScore:Number = 0;
    var errorScore:Number = 0;
    var countQ:Number = 1;
    var displayTime:Number = 30;
    var countObj:Number = 0;
    
    countDown = function (message) {
    	displayTime--;
    	if (displayTime == 0) {
    		clearInterval(timer);
    		//my_yes.start();
    		gotoAndPlay("notime");
    		//scores.nextFrame();
    	} else if (countObj == 5) {
    		clearInterval(timer);
    		remainingTime = 20-displayTime;
    		_global.result1 = countScore;
    		_global.time1 = remainingTime;
    	}
    };
    timer = setInterval(countDown, 1000);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.