2015-12-20 2 views
0

Je travaille sur un petit projet de jeu dans Flash CC, et j'ai fait une carte pour déplacer un personnage contrôlé par un joueur. La carte (un MovieClip) se déplace en fonction de la direction du mouvement du joueur (aussi un MovieClip). Les murs entourent un espace transparent qui est rempli par la couleur de la scène. Je voudrais savoir comment créer une limite MovieClip qui n'entoure pas la carte dans un rectangle qui entoure à la fois les murs et l'espace transparent. Fondamentalement, je voudrais une limite MovieClip qui entoure exclusivement l'image réelle elle-même. Je ne sais pas si c'est faisable dans AS3 ou Flash lui-même.Comment créer des limites MovieClip personnalisées dans Flash CC/Action Script 3.0?

Toute solution de contournement pour ce problème serait également appréciée si ce que je décris est inutile/impossible. Merci beaucoup!

Répondre

0

La façon la plus simple de faire ce que vous faites pour créer une nouvelle classe, disons Wall, qui étend un Sprite (vous n'avez pas besoin d'un MovieClip pour cela).

Vous pouvez même créer cette classe dans Flash CC et pas uniquement en code.

enter image description here

Note 3 choses:

1) Le mur peut avoir un remplissage transparent et sans contour. J'ai choisi de les garder juste pour que vous le voyiez sur la photo.
2) Cochez la case "Exporter pour ActionScript" et donnez-lui un nom de classe (j'ai choisi "Mur")
3) Vous pouvez éventuellement changer la classe de base par défaut de MovieClip à Sprite. Ça ne fera pas beaucoup de différence, mais c'est pour le mieux.

Puis continuez à placer ces objets muraux sur la carte, que ce soit dans MovieClip ou même dans un bitmap - cela n'a pas d'importance. Faites simplement glisser le nombre voulu de la bibliothèque sur la scène. Vous n'avez pas non plus besoin de leur donner des noms d'instance sauf si vous voulez un contrôle spécifique pour un mur spécifique (par exemple, il se retire quand un joueur prend une clé ou quelque chose)

Dans le script du jeu, vous pouvez obtenir tous les murs au début du jeu comme ceci:

import flash.display.DisplayObject; 
import flash.display.DisplayObjectContainer; 

function getWallsInAHolder(holder:DisplayObjectContainer):Vector.<Wall> 
{ 
    var wallArray:Vector.<Wall> = new Vector.<Wall>(); 

    var currentChild:DisplayObject; 
    for (var i:int = 0; i < holder.numChildren; i++) 
    { 
     currentChild = holder.getChildAt(i); 
     if (currentChild is Wall) 
      wallArray.push(currentChild); 
    } 

    return wallArray; 
} 

trace(getWallsInAHolder(this).length); 

quelques remarques importantes sur le code:

1) Il a été écrit dans un cadre pour le bien de ne pas passer trop de temps.
2) Vous pouvez toujours utiliser la méthode getWallsInAHolder() dans votre classe, elle est totalement autonome. Puis, il est facile d'utiliser la détection de collision AABB (ou toute autre) pour vérifier si le personnage entre en collision avec un mur. C'est encore mieux parce que vous n'avez pas à programmer dans la position (et la taille) de chaque mur - il suffit de les glisser et de les glisser dans Flash!

+0

Merci beaucoup! Je vais donner un coup de feu. – PlzHelp

+0

Si cette réponse est correcte, veuillez la sur-évaluer et la marquer comme complétée pour aider les autres ayant le même problème. –

+0

En regardant votre réponse à fond, je ne suis pas sûr que ce soit ce que je cherche. D'après ce que je comprends, vous définissez une méthode unique de fabrication de nombreux murs uniformes. J'ai fait une carte entière, et je l'ai importée dans la bibliothèque, puis je l'ai convertie en MovieClip. Il se déplace correspondant au joueur, cependant, parce que les limites de MovieClip (autant que je sache) ne peuvent qu'encapsuler les choses dans une forme rectangulaire, le joueur ne fait que passer par-dessus tout.J'aimerais que le joueur puisse se déplacer dans tout ce qui est vide, et qu'il s'arrête quand il frappe quelque chose qui ne l'est pas. Cela a-t-il du sens? – PlzHelp