Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    |MX| hit test e mouse pointer

    ciao a tutti
    dovrei fare un gioco di animazione con flash molto semplice dove c'e' un mc PLAYER(giocatore)
    e un mc BKG(background)
    ora lo scopo e' di far muovere il player seguendo il mouse, ma quando arriva sui bordi del BKG
    si deve fermare nella posizione in cui si scontra per poi ripartire se il mouse ritorna sul BKG

    ora sul PLAYER(istanziato come tale) ho:

    onClipEvent (load) {
    // declare and set initial variables and properties
    clickSpot_x = _x;
    clickSpot_y = _y;
    speed = 8;

    }
    onClipEvent (enterFrame) {
    gotoSpotX = _root._xmouse;
    gotoSpotY = _root._ymouse;
    // calculate angle of current position to target position
    delta_x = _x-gotoSpotX;
    delta_y = _y-gotoSpotY;
    targetRotation = -Math.atan2(delta_x, delta_y)/(Math.PI/180);


    {_rotation = targetRotation;
    }
    //
    // move beetle toward the target and stop when it gets there
    if (Math.sqrt((delta_x*delta_x)+(delta_y*delta_y))>sp eed) {
    _y -= speed*Math.cos(_rotation*(Math.PI/180));
    _x += speed*Math.sin(_rotation*(Math.PI/180));
    }
    e fin qui tutto bene il player segue agevolmente il mouse , ma per farlo fermare sul
    bordo del BKG ho provato con HitTest,
    ma nn so dov eposizionarlo,sul mc BKG?
    o sul frame della timeline di BKG?
    e poi che azione devo impostare affinche' il clip PLAYER si fermi?
    grazie per gli eventuali aiuti
    ?

  2. #2

    up

    ?

  3. #3
    if (this.scarpe.hitTest(_root.mio_array[i])) {
    collisione = true;
    this.scarpe.stop()

    questo è un estratto di un mio esempio dove le "scarpe" sono l'elemento estremo di un omino che utilizzo per il controllo "collisione" con una serie di oggetti (i cui nomi nel mio caso sono inseriti in un array)

    qui l'esempio

  4. #4

    grazie

    avevo ricercato nel forum alcuni 3d con la parola collisione e me ne e' venuto fuori uno con il tuo omino che sbatteva col cappello e di li avevo preso spunto per alcune cose.
    ora ho visto il tuo swf ed e' funzionale, ma il mio problema e' che devo fare avvenire le collisioni con un MC che segue il mouse(e il listato sopra e' quello che ho sul MC player) e ho riscontrato alcuni problemi con l'hittest:
    o non se lo calcola proprio e continua a girovagare per lo stage anche dove nn dovrebbe
    oppure anche con get bounds restituendomi x e y max funziona,ma poi quello che alla fine ho e l'area di un rettangolo,mentre il perimetro del bkg e' assolutamente irregolare quindi nn funziona
    ad ogni modo grazie per l'aiuto e,se risolvendo alcune tue problematiche, ti saltasse fuori qualcosa che fa anche al caso mio ti ringrazierei se me ne mettessi al corrente
    ?

  5. #5
    le collisioni fra due mc avvengono sempre per scatola d'ingombro (bounding box) se vuoi una collisione precisa che segua forme diverse da un rettangolo devi testarla fra un mc e un punto...

    se il tuo player è ragionevolmente piccolo da poter essere considerato un punto puoi fare la collisione fra il bg e le sue coordinate x ed y

    if(bg.hitTest(player._x, player._y, true)) {
    bla bla
    }

    quel true sta a significare di usare la forma vera del mc bg e non il suo rettangolo d'ingombro. Sta cosa però non la puoi fare fra due mc

    ciauz
    "La consapevolezza di Case suddivisa come perle di mercurio. La sua visione era sferica, come se una singola retina rivestisse la superficie interna di un globo che conteneva tutte le cose, se tutte le cose si potevano contare." —Neuromante, William Gibson (1984)

  6. #6
    a meno che ..... come disse Drugantino poichè il problema è puramente grafico, disegna pure il tuo oggetto con cui fare la collisione, e poni in collisione ad esempio una piccola "retta" (Clip _visible=0)

    Ciao

  7. #7

    ringrazio

    per adesso ringrazio entrambi per le dritte
    sto ancora in fase di sperimentazione
    e per adesso ho provato facendo una serie di clip bkg che mi definiscono il profilo del bkg anche se poi sono tanti piccoli bounding box e quindi nn seguono esattamente il profilo dello spazio che ho disegnato, ma cmq il risultato e' buono, ma per rendere il codice piu' pulito, vorrei creare un array che contenga tutti i clip bkg
    bkg1
    bkg2
    bkg3
    ecc. ecc.
    in modo che il codice del player sia
    ....
    if (player.hitTest(_root.bkg(<----array dei bkg))) {
    speed=0

    come posso fare
    a voi l'ardua sentnza :metallica
    ?

  8. #8
    for (var i in matrice) {
    if(this.hitTest(matrice[i])) {
    trace("colpito");
    break;
    }
    }

    "La consapevolezza di Case suddivisa come perle di mercurio. La sua visione era sferica, come se una singola retina rivestisse la superficie interna di un globo che conteneva tutte le cose, se tutte le cose si potevano contare." —Neuromante, William Gibson (1984)

  9. #9
    ok ho risolto il mio problema principale::
    il player(ovvero una sottospecie di caccola che si muove vorticosamente per tutto lo schermo inseguendo il mouse) si muove, sbatte contro il bkg,si ferma e se il mouse si muove anch'egli riparte di slancio!! ok ci e' costata quattro giorni di lavoro e fin qui tutto bene, ma per pulire il codice che piu' o meno e' cosi':

    onClipEvent (enterFrame) {
    if (this.hitTest(_root.bkg)) {
    speed=0.4
    }else{
    if (this.hitTest(_root.bkg2))
    speed=0.4
    }else{
    if (this.hitTest(_root.bkg3))
    speed=0.4
    }else{
    if (this.hitTest(_root.bkg4))
    speed=0.4
    eccc
    eccc

    come posso fare a creare un array ( se questo e' il suo vero nome)
    che contenga i miei 35 bkg?
    ok chi mi aiuta nn posso offrire spumante o altro, ma almeno il file finale con il sorgente...
    cmq grazie a tutti panta e rempox :metallica :metallica
    ?

  10. #10
    nell'esempio che ti ho postato l'array c'è ma ...l'ho creato a mano.

    hai dato una sguardo alla condizione while per il controllo dele collisioni ??

    Ma forse non ho capito la domanda.

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.