2011-08-31 2 views
0

J'ai une grille 4 * 4. J'ai 16 MovieClips éparpillés autour de la grille. Chaque MovieClip est 40 * 40 et ils sont déplaçables. L'utilisateur peut faire glisser et déposer les MovieClips dans la grille. Chaque clip a une position correcte. Par exemple, pourPosition d'une pièce de puzzle dans un puzzle Flash

agrafe 0: x = 0, y = 0

clip 1: x = 40, y = 0

clip 2: x = 120, y = 0

Clip 3: x = 160, y = 0

pince 15: x = 160, y = 160

les finitions de jeu lorsque tous les clips sont en position correcte. Il est donc facile de vérifier le jeu. Utilisez une boucle et ENTER_FRAME pour surveiller les positions de tous les clips.

Il y a un petit problème que je ne peux pas résoudre. Lorsque l'utilisateur fait glisser un clip, il se positionne sur la grille, qu'il soit correct ou non. Les positions snappables seront des multiples de 40 dans ce cas. Il est possible que deux clips soient accrochés à un emplacement et ceci doit être évité. Si j'ai mis un clip à (40,120) je ne devrais pas être en mesure de déposer un autre MovieClip là. En effet, je devrais être en mesure d'obtenir une indication me disant que cette position est occupée.

En utilisant l'indication, je vais faire revenir le MovieClip à sa position d'origine.

Comment cela peut-il être réalisé. Les points d'enregistrement de MovieClips sont topleft.

Répondre

2

Transporter un objet avec des informations sur l'occupation des 16 champs. Si un clip est présent, définissez la propriété appropriée sur true. Alternative: Une solution astucieuse est d'utiliser simplement un int var et une somme binaire:

1 = first field 
2 = second field 
4 = third field 
8 = ... 

Si les trois premières positions sont occupées, votre somme sera 1 + 2 + 4 = 7.

test Vous si un champ est occupé comme ceci:

if ((SUM & testFieldNumber) == testFieldNumber) THEN occupied 

Au moment où l'utilisateur relâche la souris, vous devez calculer la position du clip se mettra en. Vérifiez si le champ est occupé en utilisant votre objet ou la chose somme binaire. Si c'est le cas, réinitialisez la position du clip à son état antérieur. Si le champ est encore libre, vous ajoutez le champ à votre objet ou la somme binaray:

SUM += fieldNumber 

Si un clip quitte son champ:

SUM -= fieldNumber 

Résumé:

  • magasin toujours la dernière position valide de chacun de vos clips
  • Stockez l'occupation des champs (objet ou somme binaire)
  • Calculer la position du clip (champ) possible lorsque l'utilisateur relâche la souris
  • Si le champ est libre: déplacez le clip, stockez l'occupation du champ (dans la somme des objets ou des bin). Mémorise la nouvelle position du clip comme dernière position valide.
  • Si le champ est occupé: placer un clip dans sa position initiale
  • Lorsque le clip quitte sa position initiale mise à jour la liste des professions de champ (objet ou somme bin)
+0

Je préfère aller avec la méthode d'objet. Je suis un peu rouillé à propos de logique et OU etc. Mais je pense que j'ai l'idée de base. Pourriez-vous me donner quelques bons liens pour savoir si ce genre de code utilise le 'int var et la somme binaire'. Si vous avez un échantillon de code s'il vous plaît envoyer. Je voudrais étudier cette méthode pour l'avenir. [email protected] –

+0

Pour utiliser des sommes binaires, vous n'avez vraiment pas besoin de comprendre les concepts d'opérateurs binaires. Je devrais même regarder les docs pour les expliquer. Vous avez simplement besoin de maintenant que vous pouvez avoir un seul numéro et êtes en mesure de vérifier si le nombre contient une certaine valeur. Pour ce faire, les valeurs doivent être des puissances de 2. C'est la même chose qu'avec les autorisations de fichier unix. –