J'essaie de créer un MovieClip qui sera utilisé dans d'autres projets. C'est en fait le jeu de 15 puzzles. J'ai tout fonctionné excepté comment exécuter le movieclip quand quelqu'un gagne la partie. Vérification de la victoire fonctionne donc je sais quand j'ai besoin de jouer le clip, je ne sais pas comment. Tout doit rester sous le MovieClip Puzzle. Je vais attacher le code. J'utilise la "fausse" victoire pour tester donc je n'ai pas à jouer le jeu chaque fois que je veux le tester. Je suis un vétérinaire de 40 ans de programmation COBOL, mais très nouveau pour Flash. Ce que j'ai besoin de savoir est: 1) Où mettre le win_mc 2) Comment l'appeler du gestionnaire de mousedown où je teste pour une victoire 3) Commentaires sur le codage grandement appréciés. Je veux apprendre Flash dans le bon sens.Exécution d'un MovieClip dans un autre qui est dans le scénario principal
Merci pour toute aide. Ray
Action Layer of "Puzzle"
Function to initialize a new game.
// Should include:
// tile size
// x Offset
// y Offset
// Reset any counters used to record statistics for any given game.
function initGame()
{
_global.numMoves = 0;
_global.hours = 0;
_global.minutes = 0;
_global.seconds = 0;
var _loc1 = this;
//
// Place tiles on the board in the "solved" state.
//
tileDist = 52; // Tile size
xOffset = -16; // Tile x offset, controls where the left side of the tiles start.
yOffset = 115; // Tile y offset, controls where the top side of the tiles start.
_global.solutionTileName = new Array;
_global.solutionTileX = new Array;
_global.solutionTileY = new Array;
SliderFrame._x = 114;
SliderFrame._y = 245;
//
for (x = 1; x <= 4; x++)
{
for (y = 0; y <= 3; y++)
{
tile = x + y * 4;
_loc1["tile" + tile]._x = xOffset + (x * tileDist);
_loc1["tile" + tile]._y = yOffset + (y * tileDist + tileDist);
//
// Build a solution matrix for the puzzle.
//
_global.solutionTileName[tile] = "Tile" + tile;
_global.solutionTileX[tile] = xOffset + (x * tileDist);
_global.solutionTileY[tile] = yOffset + (y * tileDist + tileDist);
//
} // end of for
} // end of for
//trace(solutionTileName);
//trace(solutionTileX);
//trace(solutionTileY);
//
// Randomize the tiles after placing them on the board.
// NOTE: According to references, about half of the initial random configurations are unsolvable.
// This puzzle is always solvable because the shuffle algorithm starts from the "final"
// image and makes a series of random legal moves.
//
for (tilenum = 0; tilenum < 100; tilenum++)
{
do
{
tile = "tile" + (random(15) + 1);
emptySpace = findEmpty(tile);
} while (emptySpace == "none")
moveTile(tile, findEmpty(tile));
} // end of for
_global.numMoves = 0;
this.txt = numMoves;
} // End of the function
//
//
// Function to find an empty slot adjacent to a given tile.
// Returns :
// "left", "right", "above", "below", or "none"
//
function findEmpty(tile)
{
tilex = this[tile]._x;
tiley = this[tile]._y;
// trace("findEmpty - Tile=" + tile + "(" + tilex + "," + tiley + ")");
// Check for empty slot - LEFT
if (tilex > xOffset + tileDist)
{
if (!tileThere((tilex - tileDist), tiley))
{
//trace("tile not there LEFT - (" + (tilex - tileDist) + "," + tiley + ")");
return ("left");
} // end if
} // end if
// Check for empty slot - RIGHT
if (tilex < (xOffset + (tileDist * 4)))
{
if (!tileThere((tilex + tileDist), tiley))
{
//trace("tile not there RIGHT - (" + (tilex + tileDist) + "," + tiley + ")");
return ("right");
} // end if
} // end if
// Check for empty slot - ABOVE
if (tiley > (yOffset + tileDist))
{
if (!tileThere(tilex, (tiley - tileDist)))
{
//trace("tile not there ABOVE - (" + tilex + "," + (tiley - tileDist) + ")");
return ("above");
} // end if
} // end if
// Check for empty slot - BELOW
if (tiley < (yOffset + (tileDist * 4)))
{
if (!tileThere(tilex, (tiley + tileDist)))
{
//trace("tile not there BELOW - (" + tilex + "," + (tiley + tileDist) + ")");
return ("below");
} // end if
} // end if
return ("none");
} // End of the function
//
// Function to test if there is a tile in a given slot.
// Returns :
// "true" or "false"
//
function tileThere(thisx, thisy)
{
var _loc1 = this;
var _loc2 = thisx;
var _loc3 = thisy;
for (i = 1; i <= 15; i++)
{
if (_loc1["tile" + i]._x == _loc2)
{
if (_loc1["tile" + i]._y == _loc3)
{
return (true);
} // end if
} // end if
} // end of for
return (false);
} // End of the function
//
// Function to move a given tile left, right, up, or down depending on direction passed.
// Returns :
// nothing
//
function moveTile(tile, direction)
{
var _loc1 = tile;
var _loc2 = this;
var _loc3 = direction;
if (_loc3 == "above")
{
_loc2[_loc1]._y = _loc2[_loc1]._y - tileDist;
_global.numMoves = _global.numMoves + 1;
this.txt = numMoves;
return;
} // end if
if (_loc3 == "below")
{
_loc2[_loc1]._y = _loc2[_loc1]._y + tileDist;
_global.numMoves = _global.numMoves + 1;
this.txt = numMoves;
return;
} // end if
if (_loc3 == "left")
{
_loc2[_loc1]._x = _loc2[_loc1]._x - tileDist;
_global.numMoves = _global.numMoves + 1;
this.txt = numMoves;
return;
} // end if
if (_loc3 == "right")
{
_loc2[_loc1]._x = _loc2[_loc1]._x + tileDist;
_global.numMoves = _global.numMoves + 1;
this.txt = numMoves;
} // end if
} // End of the function
//
//
// Function to find which tile is under the mouse when clicked.
// Returns :
// i an integer indicating Tile1, Tile2,...,Tile15
//
function tileUnderMouse()
{
var _loc1 = this;
for (i = 1; i <= 15; i++)
{
if (_loc1["Tile" + i].hitTest(_xmouse, _ymouse))
{
return (i);
} // end if
} // end of for
} // End of the function
function GetElapsedTime()
{
_global.hours;
_global.minutes;
_global.seconds;
_global.elapsedTime;
seconds = seconds + 1;
if (seconds == 60)
{
minutes = minutes + 1;
seconds = 0;
}
if (minutes == 60)
{
hours = hours + 1;
minutes = 0;
}
tSeconds = seconds;
tMinutes = minutes;
tHours = hours;
if (Seconds < 10)
{
tSeconds = "0" + tSeconds;
}
if (Minutes < 10)
{
tMinutes = "0" + tMinutes;
}
if (minutes < 1)
{
tMinutes = "00";
}
if (hours < 10)
{
tHours = "0" + tHours;
}
if (hours < 1)
{
tHours = "00";
}
elapsedTime = tHours + ":" + tMinutes + ":" + tSeconds;
} // End of the function
//
// Function to test if the puzzle is solved.
// Returns :
// "true" or "false"
//
function isWin()
{
var win = 1;
for (i = 1; i <= 15; i++)
{
if (("Tile" + i) != solutionTileName[i])
{
win = 0;
} // end if
if (this["Tile" + i]._x != solutionTileX[i])
{
win = 0;
} // end if
if (this["Tile" + i]._y != solutionTileY[i])
{
win = 0;
} // end if
} // end of for
if (win == 1)
{
return(true);
}
else
{
return(false);
}
} // End of the function
//
// Entry point to movie clip Puzzle_mc
//
_global.solutionTileName = new Array;
_global.solutionTileX = new Array;
_global.solutionTileY = new Array;
_global.numMoves = 0;
_global.hours = 0;
_global.minutes = 0;
_global.seconds = 0;
this.elapsedTime = "00:00:00";
var intervalId;
initGame();
intervalId = setInterval(GetElapsedTime,1000);
stop();
Layer 16 of "Puzzle"
//
// Action Function to handle the mouse click and move the tile to the appropriate position.
// Returns :
// nothing
//
onClipEvent (mouseDown)
{
//tileClicked = _root.Puzzle_mc.tileUnderMouse();
//emptySpace = _root.Puzzle_mc.findEmpty("tile" + tileClicked);
//_root.Puzzle_mc.moveTile("tile" + tileClicked, emptySpace);
tileClicked = _parent.tileUnderMouse();
emptySpace = _parent.findEmpty("tile" + tileClicked);
_parent.moveTile("tile" + tileClicked, emptySpace);
//if (this.isWin())
if (_parent.isWin())
{
trace(this + "TRUE");
}
else
{
Win_mc.Play(2);
//WinSymbol.gotoAndPlay("WinSymbolL");
//gotoAndPlay("WinSymbolL");
trace(this + "FALSE");
}
}
Merci Branden, c'est pour le plaisir, en faisant des utils pour mon téléphone LG oser. J'ai placé le Win_mc dans Puzzle_mc avant tout sauf le calque Action. J'ai changé le code dans le gestionnaire mousedown à _parent.Win_mc.gotoAndPlay (2); (L'animateur demande en fr2) Si je mets un stop dans f1 de Win_mc, rien dans Win_mc ne marche; si je ne Win_mc pas exécute immédiatement pendant que le jeu est prêt à être joué. Il me manque quelque chose mais je ne sais pas ce que c'est. –
Eh bien, l'action d'arrêt est nécessaire ici ou ailleurs pour empêcher win_mc de jouer prématurément. Sinon, il semble que vous ayez un problème de chemin relativement simple (mais vous avez du mal à diagnostiquer/réparer!). Si vous le souhaitez, vous pouvez m'envoyer la FLA et je vais jeter un coup d'œil à la structure. Vous pouvez m'envoyer un email à bhall sur le site que j'ai listé dans mon profil. –
Il s'avère que c'était un problème lié à l'IDE plutôt que du code - le bit _parent était correct cependant. –