Visualizzazione dei risultati da 1 a 4 su 4

Discussione: onMouseMove

  1. #1

    onMouseMove

    Ciao
    sto cercando di riprodurre una specie di lavagnetta per disegnare linee rette.
    nel mio caso quando ci si avvicina all'estremita di una linea gia disegnata, appare un cerchietto attorno all'estremita stessa, che vuole segnalare che se si fa partire la nuova linea da quel punto, essa sara incollata magneticamente all'altra linea.
    Il mio problema e' che il cerchietto non sparisce quando ci si allontana dall'estremita della linea.

    Posto qui il codice. se volete provarlo e' semplice: basta incollarlo nel primo frame di un filmato e poi crearvi un mc chiamato "cerchio" a mo di tondino.

    codice:
    lineacounter = 0;
    lista = new Array();
    someListener = new Object();
    
    
    function drawToExt(bool, x, y, db, c) {
    	for(i=0; i<db.length; i++) {
    		xy = db[i].split("|");
    		if(Math.abs(x-xy[0]) <= 3 && Math.abs(y-xy[1]) <= 3) {
    			if(bool==true) _root["linea" + c].moveTo(xy[0], xy[1]);
    			else _root["linea" + c].lineTo(xy[0], xy[1]);
    			break;
    		}
    		else if(Math.abs(x-xy[2]) <= 3 && Math.abs(y-xy[3]) <= 3) {
    			if(bool==true) _root["linea" + c].moveTo(xy[2], xy[3]);
    			else _root["linea" + c].lineTo(xy[2], xy[3]);
    			break;
    		}
    		else {
    			if(bool==true) _root["linea" + c].moveTo(x, y);
    			else _root["linea" + c].lineTo(x, y);
    		}
    	}
    }
    
    someListener.onMouseDown = function () {
    	_root.createEmptyMovieClip ("linea" + lineacounter, lineacounter);
    	  with (_root["linea" + lineacounter]) {
    		lineStyle (1, 0x000000, 100);
    		startx = _root._xmouse;
    		starty = _root._ymouse;
    		if(lineacounter==0) moveTo(startx, starty);
    		else drawToExt (true, startx, starty, lista, lineacounter);
    	}
    };
    
    someListener.onMouseUp = function () {
    	  with (_root["linea" + lineacounter]) {
    		endx = _root._xmouse;
    		endy = _root._ymouse;
    		if(lineacounter==0) lineTo(endx, endy);
    		else drawToExt (false, endx, endy, lista, lineacounter);
    	}
    	lineacounter++;
    	dati = startx + "|" + starty + "|" + endx + "|" + endy;
    	lista.push(dati);
    };
    
    someListener.onMouseMove = function () {
    	posx = _root._xmouse;
    	posy = _root._ymouse;
    	for(i=0; i<=lineacounter; i++) {
    		xy = _root.lista[i].split("|");
    		if(Math.abs(posx-xy[0]) <= 3 && Math.abs(posy-xy[1]) <= 3) {
    			_root.cerchio._visible = true;
    			_root.cerchio._x = xy[0] - 5;
    			_root.cerchio._y = xy[1] - 5;
    		}
    		else if(Math.abs(posx-xy[2]) <= 3 && Math.abs(posy-xy[3]) <= 3) {
    			_root.cerchio._visible = true;
    			_root.cerchio._x = xy[2] - 5;
    			_root.cerchio._y = xy[3] - 5;
    		}
    		else _root.cerchio._visible = false;
    	}
    };
    
    Mouse.addListener(someListener);
    cio' che non capisco e' xke l'else dell'onMouseMove non funzioni, cioe' non faccia sparire il cerchietto quando non si e' piu' sulle coordinate specificate nell'array.

    Se qualcuno puo' aiutarmi gliene sarei grato.

    ciauz,
    Ale
    Moderatore di me stesso
    LAVORICREATIVI.COM - ANNUNCI PER CREATIVI e AGENZIE
    SNOWTURA.COM - UNDER CONSTRUCTION

  2. #2
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    A occhio e croce, devi verificare quando xy è undefined..

  3. #3
    si ma in linea teorica xy non dovrebbe mai essere undefined.
    l'array linea viene ciclato finche' ci sono linee disegnate e quindi '_root.lista[i].split("|");' dovrebbe sempre essere definito.
    Moderatore di me stesso
    LAVORICREATIVI.COM - ANNUNCI PER CREATIVI e AGENZIE
    SNOWTURA.COM - UNDER CONSTRUCTION

  4. #4
    problema risolto. posto la funzione incriminata corretta:
    codice:
    someListener.onMouseMove = function () {
    	_root.cerchio._visible = false;
    	posx = _root._xmouse;
    	posy = _root._ymouse;
    	for(i=0; i<lineacounter; i++) {
    		xy = _root.lista[i].split("|");
    		if(Math.abs(posx-xy[0]) <= 3 && Math.abs(posy-xy[1]) <= 3) {
    			_root.cerchio._visible = true;
    			_root.cerchio._x = xy[0] - 5;
    			_root.cerchio._y = xy[1] - 5;
    		}
    		else if(Math.abs(posx-xy[2]) <= 3 && Math.abs(posy-xy[3]) <= 3) {
    			_root.cerchio._visible = true;
    			_root.cerchio._x = xy[2] - 5;
    			_root.cerchio._y = xy[3] - 5;
    		}
    	}
    };
    grazie cmq nega!

    ciauz,
    Ale

    PS: negatyve ma tu ferie? no, eh...
    Moderatore di me stesso
    LAVORICREATIVI.COM - ANNUNCI PER CREATIVI e AGENZIE
    SNOWTURA.COM - UNDER CONSTRUCTION

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.