推 etrexetrex:推 11/20 13:01
※ 引述《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)