2012-10-10 2 views
0

Donc, fondamentalement, j'ai ce problème avec hitTesting.Avec tous les AS3 que j'ai fait, je n'ai jamais rencontré cette erreur.Je travaille avec glisser-déposer et essentiellement vous devez faire glisser le poubelle dans le forward.Here droit bin.Pretty est le code qui salit et me donne l'erreur:TypeError: Erreur # 1009: impossible d'accéder à une propriété ou une méthode d'une référence d'objet null. Pour A noob

if(coin3.hitTestObject(wallet1)) { 
coins +=1; 
coin3.x -=7000; 
} 

donc, cette erreur est vraiment ennuyeux moi et je besoin fixe, il est de détruire mon jeu! Je n'ai pas assigné l'objet à une variable ou à un type de données, juste cela directement. Comment est-ce que je corrige ceci? Je ne sais pas ce qu'est un nul! Voici le code entier:

import flash.events.Event; 
import flash.events.MouseEvent; 
var coins:Number = 0; 
var maxcoins:Number = 3; 
coin2.addEventListener(MouseEvent.MOUSE_DOWN, coin2drag); 
function coin2drag(e:MouseEvent) 
{ 
    coin2.startDrag(); 
} 
stage.addEventListener(MouseEvent.MOUSE_UP, coin2undrag); 
function coin2undrag(e:MouseEvent) 
{ 
    coin2.stopDrag(); 
} 

coin3.addEventListener(MouseEvent.MOUSE_DOWN, coin3drag); 
function coin3drag(e:MouseEvent) 
{ 
    coin3.startDrag(); 
} 
stage.addEventListener(MouseEvent.MOUSE_UP, coin3undrag); 
function coin3undrag(e:MouseEvent) 
{ 
    coin3.stopDrag(); 
} 
coin4.addEventListener(MouseEvent.MOUSE_DOWN, coin4drag); 
function coin4drag(e:MouseEvent) 
{ 
    coin4.startDrag(); 
} 
stage.addEventListener(MouseEvent.MOUSE_UP, coin3undrag); 
function coin4undrag(e:MouseEvent) 
{ 
    coin4.stopDrag(); 
} 

coin2.addEventListener(Event.ENTER_FRAME, coin2hit); 
function coin2hit(e:Event) 
{ 
    if (coin2.hitTestObject(wallet1)) 
    { 
     coins += 1; 
     coin2.x += 700000; 
    } 
    if (coins == maxcoins) 
    { 
     gotoAndStop(54); 
    } 
} 


coin3.addEventListener(Event.ENTER_FRAME, coin3hit); 
function coin3hit(e:Event) 
{ 
    if (coin3.hitTestObject(wallet1)) 
    { 

     coins += 1; 
     coin3.x += 700000; 
    } 
}; 


coin4.addEventListener(Event.ENTER_FRAME, coin4hit); 
function coin4hit(e:Event) 
{ 
    if (coin4.hitTestObject(wallet1)) 

    { 
     coins += 1; 
     coin4.x += 700000; 
    } 
}; 
+0

quelle version utilisez-vous. Je pense que c'est un bug dans Flash cc 2015. Vérifiez cela: http://s6.uplod.ir/i/00707/wlot7x3fj87e.png –

Répondre

0

Cette erreur signifie qu'un objet que vous essayez d'accéder à n'existe pas. Dans ce cas, cela signifie que les variables coin3, wallet1 ou pièces de monnaie n'ont pas été correctement créées (initialisées) avant d'être utilisées. Assurez-vous juste que coin3 et wallet1 sont les vrais noms de vos MovieClips et qu'ils sont réellement sur la scène, et assurez-vous que les pièces sont placées à n'importe quelle valeur au moins une fois avant de les utiliser (comme pièces de monnaie = 0;).

+0

Pouvez-vous s'il vous plaît écrire un exemple de code? Coin3 et wallet1 sont les noms de MovieClip et d'instance. S'il vous plaît pourriez-vous écrire un exemple! Je suis vraiment coincé (merci pour votre aide) – user1666767

+0

En outre, il dit que le problème est coin3hit (le nom de la fonction pour le hitTest) – user1666767

+0

Assurez-vous juste quand vous déclarez la pièce de monnaie variable que vous l'avez mis à une valeur : vous devez avoir cette ligne quelque part var pièces: int = 0; avant de pouvoir utiliser la variable des pièces de monnaie n'importe où ailleurs. (mettez-le au-dessus du script en l'utilisant). Et s'il vous plaît re-vérifier que les MovieClips sont effectivement nommés coin3 et wallet1, je sais beaucoup de fois où les fautes de frappe ont fait déchirer les cheveux des développeurs :-) – elFlashor

0

Si vous instanciation vos objets strictement avec le code, assurez-vous que vous Classing vos objets correctement, et de nommer vos variables en conséquence ... à savoir:

var coin3:Coin = new Coin; 

où « coin3 » est une instance de la classe « Coin » ... en fonction de ce que vous avez l'intention de faire avec l'objet, vous devrez peut-être:

addChild(coin3); 
//this may sit inside a function, or directly after the var is created, depending on what you're trying to do 

Sinon, si vous appelez des objets que vous avez déjà physiquement entrées sur la scène, assurez-vous il a un nom d'instance de tout ce que vous appelez. Ceci est défini dans le volet de la fenêtre des propriétés. Le simple titrage du MC "coin3" (ou autre) ne le fera pas.

Sans voir plus de code, il est difficile de savoir ce qui se passe. Si le concept de structure de classe est nouveau, alors vous devriez certainement lire comment cela fonctionne, car il est essentiel de créer et de gérer correctement les objets avec des langages orientés objet comme AS3.

+0

l'ensemble du code est maintenant dans la question, pouvez-vous me dire quoi faire? – user1666767

+0

il semble que vous essayez de stocker des pièces chaque fois que vous les ajoutez au porte-monnaie oui? Si oui, une meilleure façon de le faire, serait de transformer les pièces en un tableau et de pousser les pièces dans le tableau à chaque fois ... Une fois que votre maxcoins est atteint, vous pouvez effacer le tableau pour la prochaine course ... Aussi pourquoi envoyez-vous votre pièce à x = 700000? essayez-vous simplement de vous en débarrasser? – MaxG

+0

Oui, j'essaie de m'en débarrasser. Pourriez-vous changer mon code en tableaux pour me montrer ce que vous voulez dire, je ne comprends pas tout à fait.Mon email est [email protected] <--- Je serai vraiment reconnaissant! – user1666767

0

Cela pourrait vous aider à démarrer ... Découvrez comment Arrays fonctionne pour mieux comprendre comment compter et gérer les objets. Cela peut ou non être idéal pour tout ce que vous essayez réellement de faire, mais vous pouvez faire des choses assez chouettes avec eux ... Aussi, vous avez mal référencé l'une de vos fonctions glisser. Je l'ai nettoyé un peu pour le rendre un peu plus facile à gérer.

import flash.events.Event; 
import flash.events.MouseEvent; 

var coins:Array(); 
//this creates an empty array 

var maxcoins:int= 3; 

coin2.addEventListener(MouseEvent.MOUSE_DOWN, drag); 
coin2.addEventListener(MouseEvent.MOUSE_UP, undrag); 
coin3.addEventListener(MouseEvent.MOUSE_DOWN, drag); 
coin3.addEventListener(MouseEvent.MOUSE_UP, undrag); 
coin4.addEventListener(MouseEvent.MOUSE_DOWN, drag); 
coin4.addEventListener(MouseEvent.MOUSE_UP, undrag); 

// if only dragging one object at a time, then you can just put all your drags into two  functions 

function drag(e:MouseEvent) 
{ 
coin2.startDrag(); 
coin3.startDrag(); 
coin4.startDrag(); 
} 

function undrag(e:MouseEvent) 
{ 
coin2.stopDrag(); 
coin3.stopDrag(); 
coin4.stopDrag(); 
} 

///////////////////////////////////////////////////////////////// 

coin2.addEventListener(Event.ENTER_FRAME, coin2hit); 
function coin2hit(e:Event) 
{ 
if (coin2.hitTestObject(wallet1)) 
{ 
    coins.push(coin2); 
//this pushes the coin into the Array which will continue count until it is  cleared below //// 

coin2.visible=false; 
//setting coin2 to not be visible is simpler than moving it away, especially if the object is never being added again on stage. 
} 

if (coins == maxcoins) // mind you this conditional will ONLY execute if coin2hit() is run. 
{ 
    gotoAndStop(54); 

    coins.pop(); //this clears the array //// 
} 
} 


coin3.addEventListener(Event.ENTER_FRAME, coin3hit); 
function coin3hit(e:Event) 
{ 
if (coin3.hitTestObject(wallet1)) 
{ 

    coins.push(coin3); 
    coin3.visible=false; 
} 
}; 


coin4.addEventListener(Event.ENTER_FRAME, coin4hit); 
function coin4hit(e:Event) 
{ 
if (coin4.hitTestObject(wallet1)) 

{ 
    coins.push(coin4); 
    coin4.visible=false; 
} 
}; 
+0

Comment ajouter les pièces dans le tableau? – user1666767

+0

également, essayez d'utiliser une trace pour mieux identifier le problème ... voir combien de fonctions vous pouvez passer avant que l'erreur ne survienne. par exemple, dans chaque fonction, mettez un 'trace (thisFunctionName," ou chaîne ")' ou autre chose, pour voir si cela arrive effectivement à ces fonctions. votre trace apparaîtra dans la fenêtre de sortie ... Si vous ne savez pas comment fonctionne une trace, lisez-la, car c'est aussi une partie essentielle du débogage! C'est assez simple :) – MaxG

+0

Comparaison entre une valeur avec un tableau de type statique et un type possiblement sans rapport – user1666767

Questions connexes