หน้า: 1 [2] 3
 
ผู้เขียน หัวข้อ: AS ตอนที่ 4:ลดรูป ย่อโค้ด  (อ่าน 19044 ครั้ง)
0 สมาชิก และ 1 ขาจร กำลังดูหัวข้อนี้
ได้แล้วครับ
<a href="http://f0nt.com/forum/index.php?action=dlattach;topic=6169.0;id=9584" target="_blank">http://f0nt.com/forum/index.php?action=dlattach;topic=6169.0;id=9584</a>

เอ่อ ผมสงสัยอย่างครับ คือว่าถ้าหาว่าเปลี่ยนสูตรตรงนี้
โค้ด:
  this._width+=10*compr(this._width, this.tWidth);
              this._height+=10*compr(this._height, this.tHeight);
              this._x+=5*compr(this._x, this.tX);
              this._y+=5*compr(this._y, this.tY)

เฉพาะตัวเลขหน้าเครื่องหมาย คูณ เพื่อต้องการให้มันเคลื่อนที่เร็วกว่านี้ พอดีลองเปลี่ยนแล้วปรากฎว่า มันสั่นระริกๆ น่ะครับ แล้วเราจะรู้ได้ยังไงว่ามันจะไม่สั่น
<a href="http://f0nt.com/forum/index.php?action=dlattach;topic=6169.0;id=9585" target="_blank">http://f0nt.com/forum/index.php?action=dlattach;topic=6169.0;id=9585</a>




« แก้ไขครั้งสุดท้าย: 02 มิ.ย. 2006, 22:10 น. โดย Layiji » บันทึกการเข้า

นักเขียนการ์ตูนรายปี
จากสูตรนี้

this._x+=5*compr(this._x, this.tX);

ในส่วนของฟังก์ชั่น compr ถ้าลองไล่กลับไปดู เราจะได้ค่าเป็น 1 หรือ -1 หรือ 0 เท่านั้น
ซึ่งใช้กำหนดทิศทางคับ ส่วน ตัวคูณ ใช้เพื่อกำหนดจำนวน pixel

ดังนั้น 5 มันจึงเป็นค่า speed จริงๆอย่างที่เข้าใจ ยิ่งมาก ก็ยิ่งขยับทีละเยอะๆ

แต่สาเหตุที่มันสั่นระริก เพราะว่า มันวิ่งไปไม่ถึงค่าทีทำให้ compr เป็น 0 สักที เนื่องจากตำแหน่งปลายทางที่กำหนดไม่ได้เป็นเลขลงตัวตามค่าทวีคูณของค่าความเร็วครับ

นั่นเลยเป็นข้อจำกัดของการกำหนดเงื่อนไขการตรวจสอบให้หยุดแบบนี้... ซึ่งมันเข้าใจง่าย เพราะตรงไปตรงมาว่าถึงจุดก็หยุด... แต่สามารถสร้างเงื่อนไขเพิ่มความรัดกุมได้ เช่น ถ้าค่าตำแหน่งที่วิ่งไปแล้วมีค่าความต่างน้อยกว่า speed ก็ให้มันเลื่อนไปที่ตำแหน่งปลายทางเป๊ะๆ จะได้หยุดเลย เป็นต้นครับ....
(ตรงนี้จะทำให้โค้ดยาวขึ้นและเพิ่มความงงเล็กน้อย... ผมพยายามทำให้โค้ดสั้น และตรงไปตรงมาที่สุดคับ... แต่ยังมึนกันหมดเลย   ฮือๆ~)
« แก้ไขครั้งสุดท้าย: 10 มิ.ย. 2006, 06:33 น. โดย X Saint » บันทึกการเข้า
ผมนั่งงงตรงฟังก์ชั่นตั้งนานน่ะครับ งงตรงที่ว่าจะคิดได้ยังไงว่าเอาแค่ค่าลบ ออกมาพอ
ถ้าผมคิดจะเป็นใช้ฟังก์ชั่นวนๆๆๆ แบบยาวๆ  ฮือๆ~
บันทึกการเข้า

นักเขียนการ์ตูนรายปี
ฟังก์ชั่นนี้ค่อนข้างตรงไปตรงมานะคับ
คืออยากรู้ว่าต้องเคลื่อนที่ไปทิศทางไหน จึงเอา 2 จุดมาเปรียบเทียบกัน
จุดที่อยู่ทางขวาย่อมมีค่ามากกว่าจุดที่อยู่ทางซ้าย
จึงได้ออกมาเป็น

สมมุติ จุดA คือ ต้นทาง และจุดB คือ ปลายทาง

ถ้า A > B --> A อยู่ขวา ต้องเคลื่อนที่ไปซ้าย ทิศทางจึงเป็น -1
ถ้า A < B --> A อยู่ซ้าย ต้องเคลื่อนที่ไปขวา ทิศทางจึงเป็น 1
ส่วน 0 เพื่อปรับให้อยู่กับที่ไม่ต้องเคลื่อนอีกแล้ว

แอบอ้าง
if(this._x>this.tX) { return -1;}
else if(this._x<this.tX) { return 1;}
else { return 0;}



ส่วนอีกวิธีที่ใช้ ค่าสัมบูรณ์นั้น จะดูงงกว่า แต่เป็นวิธีที่ดีที่รวบการเปรียบเทียบเป็นเพียงสมการ...
บันทึกการเข้า
เข้ามาลงทะเบียนก่อน ยิ้มน่ารัก

ยังไม่ได้เริ่มทำ
บันทึกการเข้า

[ว่างให้เช่า]
ปัญหาของคุณ layiji

สมมุติถ้าผู้กองสั่งให้ทหารนายหนึ่งเดินไปทีละ ครึ่งเมตร ไปจนถึงริมหน้าผา นายทหารก็เดินไปเรื่อยๆ จนเผอิญก้าวสุดท้ายมันเหลือแค่  ค่อนเมตรนี่สิ  เดินไปอีกครึ่งเมตร สมองก็ต้องคิดก่อนว่าถ้ายังก้าวด้วยระยะทางเท่าเดิม คงไ้ด้ตกเหวแน่ๆ สู้รักษาชีวิต ก้าวไปตรงริมเหว พอดีน่าจะดีกว่า  ลันล้า


check before done before error happend  ยิ้มน่ารัก

ส่วนโค้ดต้องให้อาจารย์เฉลยครับ  ปลื้ม
บันทึกการเข้า

รอให้สอนบทต่อไปอยู่เลยครับ คนเรียนน้อยลงเรื่อยๆซะแล้ว  ฮือๆ~

บันทึกการเข้า

นักเขียนการ์ตูนรายปี
ช่วงนี้งานยุ่งครับ
ไว้ให้เพลาๆลง จะกลับมาตั้งใจเรียนครับ
บันทึกการเข้า

        AH_LuGDeK, AH_LuGDeK_R
เดี๋ยวผมจะโอนหน่วยกิตทีหลังนะครับ  ฮิ้ววว
บันทึกการเข้า
ตายล่ะ ลืมลงทะเบียน  (เหงื่อแตกพลั่ก)
บันทึกการเข้า

Today you , Tomorrow me.
ตามมาลงทะเบียนทีหลัง ยิ้มน่ารัก

จานครับ ทำแล้วได้เยี่ยงนี้ครับ:05:
<a href="http://f0nt.com/forum/index.php?action=dlattach;topic=6169.0;id=9778" target="_blank">http://f0nt.com/forum/index.php?action=dlattach;topic=6169.0;id=9778</a>
แอบอ้าง
โค๊ด
function compr(org, des) {
    if(org>des) { return -1;}
    else if(org<des) { return 1;}
    else { return 0;}
}
function moveBox(bx) {
   bx.onEnterFrame = function() {
      if(this._width!=this.tWidth||this._height!=this.tHeight||this._x!=this.tX||this._y!=this.tY) {
              this._width+=10*compr(this._width, this.tWidth);
              this._height+=10*compr(this._height, this.tHeight);
              this._x+=5*compr(this._x, this.tX);
              this._y+=5*compr(this._y, this.tY);
      } else {
              delete bx.onEnterFrame;
      }
   };
}
butt1.onRelease = function(){
   boxA.tWidth=100;
    boxA.tHeight=30;
    boxA.tX=60;
    boxA.tY=120;
    boxB.tWidth=220;
    boxB.tHeight=60;
    boxB.tX=60;
    boxB.tY=50;
    moveBox(boxA);
    moveBox(boxB);
}
butt2.onRelease = function(){
   boxA.tWidth=100;
    boxA.tHeight=100;
    boxA.tX=60;
    boxA.tY=50;
    boxB.tWidth=100;
    boxB.tHeight=100;
    boxB.tX=180;
    boxB.tY=50;
    moveBox(boxA);
    moveBox(boxB);
}
แต่ผมอยากได้อย่างงี้ ผมต้องเปลี่ยนแปลงตรงไหนยังไงเหรอครับ (เหงื่อแตกพลั่ก)
<a href="http://f0nt.com/forum/index.php?action=dlattach;topic=6169.0;id=9779" target="_blank">http://f0nt.com/forum/index.php?action=dlattach;topic=6169.0;id=9779</a>
« แก้ไขครั้งสุดท้าย: 14 มิ.ย. 2006, 02:47 น. โดย จ๋o » บันทึกการเข้า

ขุด!!!  โวย


ตอบ จ๋อ ที  ฮือๆ~
บันทึกการเข้า
อ้าว ไม่เห็น...  ฮิ้ววว

โทษทีคับ  ฮิ้ววว

ที่ว่าจะให้เป็นแบบนั้นหมายถึงจังหวะ ความเร็ว ที่มี easing หรือว่า ความยาวของ 2 กรอบที่เท่ากันหน่ะคับ ?
บันทึกการเข้า
หมายถึงทิศทางน่ะครับ จะเห็นว่า แบบแรกมันจะยืดออกทั้งสองข้าง แล้วค่อยเลื่อนมาที่ตำแหน่งปลายทาง แต่แบบที่สอง(ที่อยากให้เป็น)จะยึดตำแหน่งทางด้านหนึ่งไว้แล้วนยืดอีกด้านไปที่ตำแหน่งปลายทาง ฮิ้ววว
บันทึกการเข้า

อ๋อ ถ้าอันนั้นอยู่ที่กำหนดจุด registerหรือจุด pivot ให้กับ movieClip ครับ
สังเกตว่าตอน convert เป็น MC มันจะมีกรอบให้เลือกจุด 9 จุด...
หรือถ้าเข้าไป edit ตัว MC จะเห็นว่ามันมี + อยู่ ก็คือ ถ้า + อยู่ตรงกลาง การยืดออกจะยืดทั้งสองด้านครับ
แต่ถ้าเรากำหนดให้อยู่มุมซ้ายบน เวลายืดก็จะออกไปทางด้านขวา ล่าง ครับ
บันทึกการเข้า
หน้า: 1 [2] 3
 
 
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines | Thai language by ThaiSMF Valid XHTML 1.0! Valid CSS!