b. Thao tác với một dự án trong Flex Builder
7.3. Chương trình Hello, PaperVision3D !
Một cách thức học lập trình đó l{ bắt tay v{o để viết code cho một chương trình đơn giản trước khi bắt đầu tìm hiểu chi tiết về nó. Ví dụ kinh điển v{ đơn giản nhất là viết ra một thông b|o “Hello”. Tuy nhiên, trong dự án này, chúng ta không đưa ra một thông b|o “Hello” như trên, m{ chúng ta sẽ tạo một quả cầu 3D đơn giản và không thêm bất cứ một đối tượng nào khác.
Nếu bạn muốn bổ sung thêm một lớp ActionScript, bạn hãy kích chuột phải vào package Lession01 mà bạn đ~ tạo ở trên, chọn New > ActionScript Class.
Theo cách tạo dự án ActionScript ở trên, Adobe Flex Builder đ~ mặc định sử dụng default package, và bên trong package này chứa một lớp mặc định cùng tên với dự án là PV3DTest.
Nội dung của lớp n{y như sau package Lession01
{
import flash.display.Sprite; // Thiết lập khung trình chiếu
public class PV3DTest extends Sprite {
public function Hello3D() {
//Viết code v{o đ}y
} }
}
Trong phần thiết lập khung trình chiếu, bạn có thể sử dụng đoạn mã sau
[SWF(width="1420", height="800", backgroundColor="0x000000")]
Trong đó, width l{ độ rộng, height l{ độ cao (được tính theo pixel); backgroundColor là màu nền.
Để bổ sung vào khung trình chiếu một đối tượng quả cầu 3D, trước tiên, ta sẽ khởi tạo một đối tượng quả cầu 3D nhờ hàm tạo được cung cấp bởi lớp Sphere
Sphere sp=new Sphere(arg0:MaterialObject3D, arg1:Number, arg2:int, arg3:int);
Trong đó, arg0 l{ c|ch phối m{u cho đối tượng sp, nó là một kiểu MaterialObject3D; arg1 – bán kính của hình cầu, kiểu dữ liệu Number; arg2, arg3 – số mãnh được phân chia theo chiều ngang và chiều dọc (số lượng các mặt Spline). Tuy đối tượng sp đ~ được tạo, nhưng nó chưa được bổ sung vào khung trình chiếu. Để bổ sung nó vào khung trình chiếu, ta phải sử dụng một khung nhìn View. Trong trường hợp này, ta sẽ sử dụng BasicView l{ khung nhìn cơ bản nhất. Lớp PV3DTest sẽ kế thừa lớp BasicView này nhờ từ khóa extends. Nhờ tính kế thừa này, lớp PV3DTest sẽ có phương thức scene.addChild của lớp BasicView.
scene.addChild(sp);
Tuy nhiên, bạn có thể gộp hai dòng lệnh này thành một – sẽ gọn g{ng hơn, nhưng nếu bạn mới bắt đầu làm quen với ActionScript (hoặc Java, C#) thì bạn không nên viết tắt như bên dưới.
scene.addChild(new Sphere(arg0:MaterialObject3D, arg1:Number, arg2:int arg3:int));
Cuối cùng, bạn hãy bổ sung v{o phương thức startRendering() để hiển thị đối tượng được tạo theo cách phối m{u được chọn lên thiết bị hiển thị của máy tính. Sau đ}y l{ chương trình Hello đầy đủ để tạo một quả cầu 3D trong không gian. package Lession01
{
import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView;
[SWF(width="1420", height="800", backgroundColor="0x000000")] public class PV3DTest extends BasicView
{
public function PV3DTest() {
scene.addChild(new Sphere(null, 500, 50, 50)); startRendering();//hoặc singleRender();
} }
}
Remarks: bạn hãy sử dụng tổ hợp phím Ctrl+Space để sử dụng chế độ Auto Generate Code (chế độ gợi nhắc mã lệnh). Nhờ vào chế độ này, bạn sẽ soạn thảo văn bản nhanh hơn v{ đồng thời, bạn sẽ không mắc phải lỗi khi viết sai tên phương thức hay thuộc tính cũng như tên lớp. Nếu bạn tạo mới một đối tượng nhờ vào một lớp thư viện kh|c, khi đó, bạn cần import thêm một thư viện tương ứng. Nhưng khi sử dụng tổ hợp phím này, việc import thư viện là hoàn toàn tự động. Bạn hãy tạo một thói quen sử dụng tổ hợp phím này. Mỗi khi bạn cần sử dụng một phương thức n{o đó, bạn hãy viết một vài kí tự đầu của phương thức, sau đó sử dụng tổ hợp phím này.
Tạo hiệu ứng động cho đối tượng 3D: tương ứng với quả cầu 3D này, chúng ta có thể tạo một chuyển động 3D tương ứng. Chương trình sau đ}y minh họa chuyển động của một hình cầu trong không gian.
Trong mô hình này, một đối tượng hình cầu sẽ quay theo trong không gian. Khi quay trong không gian, nó có thể quay theo một trong 3 chiều: theo chiều x – pitch; theo chiều y – yaw; theo chiều z – roll. Ba phương thức này có chung một cú pháp pitch(arg0), yaw(arg0) và roll(arg0). Ở đó, tham số arg0 là góc quay tương ứng trên mỗi khung hình.
package Lession01 {
import flash.events.Event;
import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView;
[SWF(width="1420", height="800", backgroundColor="0x000000")] public class PV3DTest extends BasicView
{
private var sp:Sphere; public function PV3DTest() {
sp = new Sphere(null, 500, 50, 50); scene.addChild(sp);
addEventListener(Event.ENTER_FRAME, rotatenow); }
sp.yaw(5);
startRendering(); }
} }
Trong chương trình n{y, đối tượng sp được sử dụng không chỉ trong phương thức khởi tạo, m{ còn được sử dụng trong phương thức rotatenow. Do đó, đối tượng này cần được khai b|o như l{ một dữ liệu thành viên của lớp. Trong phương thức khởi tạo, phương thức addEventListener được triệu gọi tương ứng với sự kiện ENTER_FRAME. Khi sự kiện này xảy ra, h{m rotatenow được gọi. Trong trường hợp này, hình cầu sẽ quay theo chiều của trục y – nhờ v{o phương thức yaw. Bạn hoàn toàn có thể tạo ra một cách quay mới nếu kết hợp ba phương thức yaw, pitch và roll (hoặc một trong hai phương thức trên).
Tạo hiệu ứng động cho đối tượng 3D theo chuyển động của con trỏ chuột:để tạo hiệu ứng động cho hình cầu trên theo chuyển động của chuột, ta cũng sử dụng cùng phương thức trên nhưng kết hợp với tọa độ chuột. Khi đó, h{m rotatenow có thể được viết như sau
public function rotatenow(e:Event):void{ sp.yaw((1420-mouseX)*0.01); sp.pitch((800-mouseY)*0.01); startRendering();
}
Các số liệu trong hàm này chỉ mang tính chất minh họa, mà không sử dụng một cách thức tính toán nào. Bạn hoàn toàn có thể thay đổi giá trị các tham số trong trường hợp n{y. Khi đó, bạn sẽ nhận được các hiệu ứng dịch chuyển theo trỏ chuột khác nhau. Đ}y cũng l{ một cách thức giúp phát triển kĩ năng lập trình của bạn. Bạn đừng e ngại rằng chương trình sẽ không hoạt động. Phương ch}m của chúng tôi đặt ra trong giáo trình này là không chỉ cung cấp kiến thức cho bạn mà còn phát triển tư duy s|ng tạo của bạn trong thiết kế và lập trình trên Flash.