Hệ thống mô phỏng vật lý trong Sprite Kit (phần 2)

I. Sử dụng Physics trong chương trình:

– Đầu tiên chúng ta cần phải chọn hình dạng phù hợp với đối tượng trong game.

– Mỗi đối tượng trong game đều có hình dạng khác nhau và không phải lúc nào cũng chỉ là những hình dạng cơ bản như tròn, vuông, chữ nhật. Chúng ta chỉ có thể chọn hình dáng gần gũi nhất với đối tượng.

+ Lưu ý: Bạn cũng không nên quá khắc khe với việc cho hình dáng quá gần với đối tượng vì mất thời gian mà lại làm chương trình phải xử lý quá nhiều chậm máy.

+ Các chú ý cần thiết khi sử dụng:

– Hình tròn là hình dạng hiệu quả nhất khi làm việc với các đối tượng vật lý

– Đa giác (Polygon) là hình dạng làm việc kém hiệu quả nhất do khối lượng thông tin phải được xử lý nhiều nhất do đó bạn nên tránh. Nếu không tránh được thì hãy giảm số lượng cá cạnh xuống thấp đến mức có thể để tránh làm cho game chạy bị khựng.

– Các mô phỏng vật lý là dựa trên PhysicsBody không phải là trên hình (image) của đối tượng.

– Xử lý cạnh (edge) thì phức tạp hơn so với một đối tượng có hình dạng cố định (volume) do máy vi tính phải xử lý cả 2 bên của cạnh (edge)

II. Các bược để tạo ra mô trường mô phỏng vật lý:

– Một vùng tác nhân vật lý (physicsBody) được tạo ra bằng cách gọi một SKPhysicsBody. Mỗi phương thức trong lớp sẽ định nghĩa khối lượng và các cạnh được tạo ra. (Mình ghét vật lý lắm >.<)

1. Tạo giới hạn cho cảnh game:

– Đây là bước thường có trong một game: Tạo giới hạn trong cảnh cho game scene. Nếu bạn không tạo giới hạn chỉ trong vùng màn hình thì các đối tượng sẽ rớt ra khỏi màn hình (theo nghĩa đen lẫn nghĩa bóng).

– (void) createSceneContents

{

self.backgroundColor = [SKColor grayColor];

self.scaleMode = SKSceneScaleModeAspectFit;

self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

}

2. Tạo đối tượng:

Ở đây chúng ta sẽ tạo ra một SpriteNode có hình dạng là một hình tròn. Bạn cần phải tạo ra Node, cấu hình physicsBody là hình tròn có bán kính bằng một nửa của node và sau cùng bạn phải cho phép nó tương tác với môi trường bằng việc cấu hình dynamic thành YES.

SKSpriteNode * lkSpriteNode = [SKSpriteNode spriteNodeWithImageNamed:@”lkBall”];

lkSpriteNode.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:lkSpriteNode.size.width/2];

lkSpriteNode.physicsBody.dynamic = YES;

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: