作者terrylchen (某T)
看板Flash
标题Re: [问题] 一些刚学ActionScript2.0的小问题
时间Fri Nov 20 10:05:20 2009
※ 引述《tomatos ()》之铭言:
: (问题一)
: 按下btn之後从元件库里抓出box
: box必须整齐排成4x4
: 我只会排出横坐标
第二个问题在上一位的文章中写得很详细了,
所以我就不再多写,这篇单就第一题提供我自己的作法。
以这题来说,我个人比较喜欢for回圈里i < 16,所以程式大致如下:
var STG = this; // 宣告一个变数来代替目前的stage
var col : Number = 4; // 一行有几个
var row : Number = 4; // 总共几行
function removeBox (){
//让物件消失
this._visible = false;
// 或是让物件透明
this._alpha = 0;
// 或是直接移除物件
removeMovieClip(this);
}
function addimgs (){
// 宣告for回圈里的i起始为0,最大不超过16
for (var i = 0; i < col*row; i++){
// 宣告变数同时attachMovie
var box : MovieClip = STG.attachMovie('box', 'box' + i + '_mc', STG.getNextHighestDepth());
// 赋予物件变数
box.i = i;
// 用余数去判断物件的x座标
box._x = 101*(box.i - int(box.i/col)*col);
// 用商数去判断物件的y座标
box._y = 101*(int(box.i/col));
// 按下物件让物件消失
box.onRelease = removeBox;
}
}
btn.onRelease = function (){
addimgs();
}
用余数和商数判断座标感觉起来很吊书袋,其实简单地说就是如下图示:
0 1 2 3 → 第0排,余数0 1 2 3
4 5 6 7 → 第1排,余数0 1 2 3
8 9 10 11 → 第2排,余数0 1 2 3
12 13 14 15 → 第3排,余数0 1 2 3
因此如果现在col或是row改变,只要给col或是row新的值即可,
程式不需要改写。
0 1 2 3 4 → 第0排,余数0 1 2 3 4
5 6 7 8 9 → 第1排,余数0 1 2 3 4
10 11 12 13 14 → 第2排,余数0 1 2 3 4
用单一个for回圈作计算而不用双回圈的原因,
主要是因为我到目前专案遇到的情况来说,
常常都是要parse程式传来的xml之後存成阵列,然後再去读取,
这时候box上面的i值就非常有用了,因为i值就等於阵列里的位置,
所以要读取阵列里的资料就非常方便,
只要在for回圈里加入下列的程式码:
box里的title_txt显示阵列里每笔资料的title
box.title_txt.text = dataArray[box.i].title;
box里的comment_txt显示每笔资料的comment属性
box.comment_txt.text = dataArray[box.i]['comment'];
box里的某物件停在指定的位置
box.icon_mc.gotoAndStop(dataArray[box.i].icon);
外load图片或是swf
imgLoader.loadClip(box.img_mc, dataArray[box.i].imgSrc);
以上为个人的一点心得,提供给你做参考。
ps. 题外话,现在版上关於as3.0的提问越来越多了,快赶不上了|||囧>
--
某T:我喜欢你>/////<
:You gotta try harder...╮(╯_╰)╭
某T:啥?试着硬一点>///<(羞)
:是叫你再努力一点啦<(# ̄皿 ̄)╮☆(__ __||)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.124.63.2
※ 编辑: terrylchen 来自: 59.124.63.2 (11/20 10:06)
※ 编辑: terrylchen 来自: 59.124.63.2 (11/20 10:07)
1F:推 etrexetrex:推 11/20 13:01