我正在使用Flash制作棋盘游戏;作为完全掌握Flash AS3的过程的一部分。
我有原始棋盘的JPEG。这包含〜1000个圈子,玩家可以在它们之间移动棋子。非常标准的棋盘游戏。圆圈不以任何方式有规律地间隔开。
到目前为止,我已经手动绘制了Flash中的圆圈,并将它们放置在需要的位置。这看起来很棒 - 我可以看到我所有的地方。
我现在要做的是以编程方式创建这些圆圈。我希望能够做到这一点,所以我可以调整空间的外观(取决于游戏状态)。最终我还希望能够缩放/平移整个游戏板。
我的问题是,有没有办法用独特的参考标记每个圆圈然后循环并记录位置?
我在想的东西有点像Javascript DOM“getElementsByTagName”或类似的东西。
目前我只能看到两个选项:
我对Flash很新,但我确实来自技术背景。我的意思是我不需要每一个最后的基本细节解释;相反,我只需要有人指出我正确的方向!谢谢!
答案 0 :(得分:3)
您可以将圆圈动态放置在第一位,或者完全随机,并且您将获得重叠的元素,或者将它们放置在具有小的随机偏移的网格中。也许有一个单独的fla ,会一次又一次地生成圆圈,直到您对配置感到满意为止,然后使用a吐出动作脚本代码键即可。有点像一个快速而肮脏的关卡编辑器。
var circlesNum:int = 20;
var circleRadius:Number = 10;
var circles:Array;
var row:int = 4;
var col:int = 5;
var space:int = 5;
var randomOffset:int = 5;
var randomShift:Number;
function generateCircles(event:MouseEvent = null):void{
circles = [];
while(numChildren > 0) removeChildAt(0);
for(var i:int = 0 ; i < circlesNum; i++){
var circle:Shape = new Shape();
circle.graphics.lineStyle(1);
circle.graphics.drawCircle(0, 0, circleRadius);
circle.name = 'circle'+i;
randomShift = Math.random() * randomOffset - randomOffset * .5;
circle.x = ((circleRadius * 2 +space) * (i % col)) + randomShift;
circle.y = ((circleRadius * 2 +space) * (i % row)) + randomShift;
circles.push(circle);
addChild(circle);
}
}
function generateCode(event:KeyboardEvent = null):void {
var code:String = 'var circles:Array = [';
for(var i:int = 0 ; i < circlesNum; i++){
if(i < circlesNum-1) code += '{name: ' + circles[i].name + 'x: ' + circles[i].x + ',y: ' + circles[i].y + '},\n';
else code += '{name: ' + circles[i].name + 'x: ' + circles[i].x + ',y: ' + circles[i].y + '}];';
}
trace(code);
}
stage.addEventListener(MouseEvent.MOUSE_DOWN, generateCircles);
stage.addEventListener(KeyboardEvent.KEY_DOWN, generateCode);
您可以为每个圆形影片剪辑实例命名,并使用actionscript来获取坐标。
//assuming circles is a movieclip containing all your circles
var code:String = 'var circles:Array = [';
for(var i:int = 0 ; i < circles.numChildren; i++){
if(i < circles.numChildren-1) code += '{name: ' + circles.getChildAt(i).name +'x: ' + circles.getChildAt(i).x + ',y: ' + circles.getChildAt(i).y + '},';
else code += '{name: ' + circles.getChildAt(i).name +'x: ' + circles.getChildAt(i).x + ',y: ' + circles.getChildAt(i).y + '}];';
}
trace(code);
如果你只需要每个圆圈的X / Y,你可以使用JSFL(javascript flash)循环你的圆圈并吐出坐标。
以下是一个示例:
var doc = fl.getDocumentDOM();
var sel = doc.selection;
var selStr = 'var circles:Array = [';
if(sel){
var elNum = sel.length;
for(var i = 0 ; i < elNum ; i++){
if(i < elNum-1) selStr += '{name: '+ sel[i].name +', x: ' + sel[i].x + ',y:' + sel[i].y + '},';
else selStr += '{name: '+ sel[i].name +', x: ' + sel[i].x + ',y:' + sel[i].y + '}];';
}
fl.trace(selStr);
}
转到文件&gt;新&gt; Flash Javascript文件 并粘贴。您可以将其保存为命令文件夹中的 GetSelectionXY.jsfl ,如果您觉得这很方便,则可以指定键盘快捷键。
否则,选择您的圈子(可以方便地将所有圈子放在一个图层中,然后只选择图层)并运行命令(使用播放按钮/箭头)。
应吐出类似的东西:
var circles:Array = [{name: c1, x: 286.95,y:172},{name: c1, x: 180.95,y:320},{name: c1, x: 92.95,y:126},{name: c1, x: 184.95,y:190},{name: c1, x: 392.95,y:112},{name: c1, x: 316.95,y:226},{name: c1, x: 84.95,y:207},{name: c1, x: 84.95,y:85}];
输出面板中的。
最简单的版本可能与 jsfl 有关,你可以使用DrawingObjects,没有电影剪辑,只需移动它们然后点击魔术短信键。 灵活版就是迷你编辑器 grid thingy 。
HTH