//เบิ้ลละกัน ให้ลองคลำหาเองดูสักนิดเพื่อความรู้ของท่าน (ใจดำชะมัด)
ทีนี้ก็จะมาอธิบายวิธีคร่าวๆ
จากคำถามแรก
"ต้องเขียนโคดยังไงคับถึงจะสามารถ เปลี่ยนสี font ของ Dynamiic text ที่อยู่ใน MC
โดยพอคลิ๊กเลือกที่ MC ไหน ก็สามารถเปลี่ยนสีของ font ใน MC นั้นได้"
ผมก็มั่วๆ คิดไป ทำไป ( 85.372% เปิด help ..... ความลับนะเนี่ย
)
แถมวิ่งไปหา colorPicker Component เจ๋งๆมาให้ใช้ง่ายๆ ทั้งที่ไม่เคยใช้ ก็เลยใช้เป็นแถมดีด้วย
เริ่มแรก เราก็คิดก่อนว่า mc ที่มี txt ข้างในทั้งหมดจะมีกี่ตัว เดาไว้ก่อนว่าหลาย
ถ้ามีหลายตัว เราก็ต้องคิดถึงการวนลูปไว้เลย เลี่ยงไม่ได้
เมื่อมีการวนลูป ชื่อ mc ใดๆที่ต้องการวน ควรจะเรียงกันด้วยตัวเลข mc1 , mc2 , mc3,....n
ต่อมา สร้าง mc ที่มี dynamic txt กี่ตัวก็ตามใจ แต่ dynamic txt ทุกตัวที่อยู่ใน mc ต้องชื่อเดียวกัน
ในที่นี้ผมให้ชื่อว่า txt เมื่อเวลาอ้างชื่อก็จะเป็น
mc1.txt
mc2.txt
mc3.txt
.... n
เวลาลูปจะได้ง่าย
=====================================================
ทีนี้ทำยังไงให้เมื่อคลิก mc ใดๆ แล้วสคริปถึงจะรู้ว่าเราเลือก mc ตัวนี้อยู่นะ ก็...
var mc:MovieClip; //ประกาศตัวแปรไว้ตัวนึง ให้มันเป็นตัวรับค่าการเลือก mc ของเรา
mc1.onRelease = function (){ //สร้าง event Release เมื่อคลิกที่ mc
mc = this // ให้ตัวแปรนั้นรับค่าว่ามันคือ mc1
}
mc2.onRelease = function (){ //สร้าง event Release เมื่อคลิกที่ mc
mc = this // ให้ตัวแปรนั้นรับค่าว่ามันคือ mc2
}
.... โอ๊ยยยยย มี mc สัก 20 ตัวไม่พิมพ์กันเมื่อยเลยเรอะ คำสั่งก็เหมือนกันหมด
ใช้วิธีนี้ ในการสร้าง event ที่เหมือนๆกัน (จริงๆถ้าแอดว๊านซ์กว่านี้เขาใช้คลาสกันเลย พอดีไม่เป็น.......
)
for (var i:Number = 1; i<=20; i++) {
_root["mc"+i].onRelease = function() {
mc = this;
};
}
รันครั้งเดียวพอ ก็จะสร้างคำสั่งทั้ง 20 ตัวได้แล้ว
ลองประยุกต์ใช้ครับ
===============================================
ทีนี้เราก็บอกสคริปได้แล้ว ว่าเราเลือก mc ตัวไหนอยู่ ต่อไปก็ เซ็ทค่าสี
วิธีส่งค่าสีให้ dynamic txt
var my_fmt:TextFormat = new TextFormat(); //สร้าง TextFormat(); ซึ่งสามารถเซ็ทค่า property ได้ทุกอย่าง
my_fmt.color = 0xFF0000 //ในที่นี้เราจะเซ็ทสีแดง
mc.txt.setTextFormat(my_fmt); // ก็เซ็ท txt ใน mc ที่เลือกไว้ ด้วยค่า my_fmt.color = 0xFF0000
กรณีนี้ ถ้าเราเลือก mc8 ไว้
mc.txt.setTextFormat(my_fmt); ก็คือ mc8.txt.setTextFormat(my_fmt); dynamic txt ก็จะเป็นสีแดงแล้ว
เพราะ mc = this; จากลูปคำสั่งด้านบนไง
ไม่งงนะ
ต่อ เรามีโค้ดเซ็ทสีแล้ว ทีนี้อยากจะส่งค่าสีโดยการเลือก colorPicker ล่ะ
เราก็มาดูว่า ไอ้ คอมโปแนนท์ colorPicker เนี่ย มันทำงานยังไง ส่งค่าออกมายังไง
ดูจากตัวอย่างได้ความว่า
var pickerListener:Object = new Object(); //สร้าง listener Object
pickerListener.change = function(cl:Object) { //ตรวจจับการเปลี่ยนแปลง เมื่อมีการเปลี่ยนแปลง
codeColor = "0x"+cl.getRGB(); //ให้ดึงค่าสีที่เลือก มาส่งให้ตัวแปร codeColor
my_fmt.color = codeColor; //กลับไปเอาโค้ดเซ็ทสีมาใส่ในนี้
mc.txt.setTextFormat(my_fmt); // ส่งค่าสีเรียบร้อย
};
clp.addListener(pickerListener); //สั่งให้ event listener ไปตรวจจับเหตุการณ์กับตัว colorPicker ซึ่งชื่อว่า clp
เท่านี้เมื่อมีการเปลี่ยนแปลงใน colorPicker มันก็จะส่งค่าสีให้ mc ที่เราเลือกอยู่ครับผม
==========================================================
ทีนี้ เพิ่มลูกเล่นเล็กน้อย โอ๊ยยยยย ว่างมากเรอะเนี่ยตู
- พิมพ์เพิ่มได้ เปลี่ยนแปลงได้ เลือก mc ไหน พิมพ์อันนั้น
- สีไม่เปลี่ยนขณะพิมพ์
- สีของ colorPicker ตรงกับ mc ที่เลือก
http://img2.f0nt.com/flash/6e405c69062798f08c1108bc0607aa13.swfสคริปทั้งหมด ยุ่บยั่บเลย
var my_fmt:TextFormat = new TextFormat();
var mc:MovieClip;
var pickerListener:Object = new Object();
pickerListener.change = function(cl:Object) {
codeColor = "0x"+cl.getRGB();
my_fmt.color = codeColor;
mc.txt.setTextFormat(my_fmt);
lockColor();
};
clp.addListener(pickerListener);
inp.onChanged = function() {
mc.txt.text = this.text;
};
function choose(mc:MovieClip) {
for (var i:Number = 1; i<=9; i++) {
_root["txt"+i].gotoAndStop(1);
}
mc.gotoAndStop(2);
}
for (var i:Number = 1; i<=9; i++) {
_root["txt"+i].onRelease = function() {
_root.mc = this;
choose(this);
inp.text = mc.txt.text;
lockColor();
clp.color = codeColor;
};
}
function lockColor() {
fmt = mc.txt.getTextFormat();
codeColor = "0x"+fmt.color.toString(16);
mc.txt.textColor = codeColor;
}อธิบายยยยยยยย
var my_fmt:TextFormat = new TextFormat();
var mc:MovieClip;
var pickerListener:Object = new Object();
pickerListener.change = function(cl:Object) {
codeColor = "0x"+cl.getRGB();
my_fmt.color = codeColor;
mc.txt.setTextFormat(my_fmt);
lockColor(); //เพิ่มเติมตัวล๊อคค่าสีของ dynamic txt นั้นๆ
};
clp.addListener(pickerListener);
//เพิ่มเติมตัวพิมพ์เพิ่ม แก้ไข โดยข้อความเดิมยังอยู่
inp.onChanged = function() { //เมื่อ input txt มีการเปลี่ยนแปลง (พิมพ์) ให้ส่งค่าไปที่ dynamic txt ที่เลือกอยู่
mc.txt.text = this.text;
};
//ส่วนนี้เป็นฟังชั่นแสดงผลกรอบสีแดงให้รู้ว่าเราเลือกอยู่นะ โดย mc แต่ละตัวมีสองเฟรม
//เฟรมแรกไม่มีกรอบ เฟรมสองมีกรอบแดง
function choose(mc:MovieClip) { //ฟังชั่นนี้จะส่งกากิวเม้นต์เป็น mc ตัวที่เลือก โดย
for (var i:Number = 1; i<=9; i++) { // ให้ mc ทุกตัวกลับไปเฟรมแรกที่ไม่มีกรอบ
_root["txt"+i].gotoAndStop(1);
}
mc.gotoAndStop(2); // ยกเว้นตัวที่เลือก ให้แสดงผลเฟรมสอง (กรอบแดง)
}
for (var i:Number = 1; i<=9; i++) { //อันนี้ลูปสร้าง event กดเลือก mc ใดๆ ถ้าไม่ทำแบบนี้ ก็ต้องพิมพ์คำสั่งกันอ้วกแตก
_root["txt"+i].onRelease = function() {
_root.mc = this;
choose(this); // รันแสดงผลกรอบแดงตัวที่เลือก
inp.text = mc.txt.text; //ดึง text เก่าไปแสดงผลที่ input txt
lockColor(); //ล๊อคค่าสีเดิมไว้
clp.color = codeColor; //ดึงค่าสีเดิมมาส่งให้ colorPicker แสดงผลสีเดิมด้วย
};
}
function lockColor() { //ฟังชั่นล๊อคค่าสีเดิมของ dynamic txt ที่เลือก
fmt = mc.txt.getTextFormat(); //ดึงค่า TextFormat(); ทั้งหมด
codeColor = "0x"+fmt.color.toString(16); //เอาค่าสีที่ดึงมาได้ ส่งไปตัวแปร codeColor
mc.txt.textColor = codeColor; //เซ็ทค่าสีเดิมไว้ก่อนกันเหนียว อิอิ
}
อ่ะ ดูดดดดดดดดดด