Những lệnh thường sử dụng trong Sprite Kit

* Các định nghĩa quan trọng để lập trình Sprite Kit:

#define lkScreenWidthInt (int)([UIScreen mainScreen].bounds.size.height)

#define lkScreenHeightInt (int)([UIScreen mainScreen].bounds.size.width)

#define lkScreenWidthFloat (float)([UIScreen mainScreen].bounds.size.width)

#define lkScreenHeightFloat (float)([UIScreen mainScreen].bounds.size.heitght)

* Lệnh liên quan đến vị trí:

– CGPointMake(x, y);

– CGRectGetMidX(frame): Lấy điểm giữa X của frame

– CGRectGetMidY(frame): Lấy điểm giữa Y của frame

* Cách sử dụng một loạt hình ảnh trong Sprite Kit:

– Có những lúc chúng ta cần sử dụng một loạt hình ảnh dành cho một đối tượng để tạo ra tính ngẫu nhiên cho trò chơi. Những đối tượng này có thể là những đám mây, những máy bay địch khác nhau nhưng có chung thuộc tính và cách thức sử lý giống nhau. Lúc đó chúng ta cần làm theo các bước như sau:

a. Lưu tất cả các hình ảnh vào trong một thư mục duy nhất. Ví dụ như “LapKanCollection”

b. Thay đổi phần mở rộng của nó thành LapKanCollection.altas

c. Thêm nó vào trong chương trình bằng cách kéo thả hay dùng menu để add file

d. Đánh dấu vào “Enable Texture Altas Generation” trong Built Setting của chương trình.

+ Một điểm hay nữa của việc tạo ra altas này là: Thư mục này sẽ có màu xanh và nó sẽ được cập nhật liên tục đối với folder chứa nó (phân biệt rõ folder mà bạn add với folder mà Project đang trỏ tới). Nếu bạn thêm hay bớt thì thay đổi này sẽ được cập nhật ngay lập tức.

* Sử dụng child để lấy những chữ đầu tiên của tên chứ không lấy hết tên:

[[self children] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
SKNode *node = (SKNode *)obj;
if ([[node.name substringWithRange:NSMakeRange(0, 7)] isEqual: @”present”]) {
[node removeFromParent];
}
}];

=> Sử dụng trong những trường hợp cần xoá một tập hợp những node chứ không đơn lẻ từng node.

* Tạo màu trong Sprite Kit:

#define RGB(r, g, b) [SKColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]

#define RGBA(r, g, b, a) [SKColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]

#define SKColorFromHex(hexValue) [SKColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:1.0]

#define SKColorFromHexAlpha(hexValue, a) [SKColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:a]

=> SKColor là kiểu dữ liệu màu (Color) mới của Sprite Kit, nó liên thông cả các ứng dụng Mac OS và IOS   bạn sẽ không cần phải sửa lại những dòng code khi viết lại chương trình trên MacOS.

Lưu ý: uint32_t = loại biến kiểu int không âm (unsigned integer 32-bit type)

=> Khi cần xem xét tính va chạm giữa các đối tượng thường chúng ta sẽ sử dụng loại biến này để quá trình xử lý nhanh không bị nghẽn mạch.

 

* Cách lập trình với Sprite- Kit: 

– Bình thường các lập trình viên thường lưu lại những đối tượng và xử lý trên những đối tượng này. Cách này vô cùng thuận tiện cho việc lập trình bình thường với các đối tượng tuy nhiên nó lại không phù hợp với lập trình game trong Sprite Kit. Lý do là cấu trúc của Sprite Kit khác với lập trình bình thường. Nó luôn giữ lại những đối tượng game chưa được xoá bỏ (RemoveFromParent) nên việc lưu trữ lại những đối tượng đang làm việc trở nên thừa thải.

– Chính vì vậy lập trình với Sprite Kit, các lập trình viên game đi theo một hướng mới đó là lập trình cây (Tree). Bạn không cần phải lưu trữ những đối tượng cần xử lý vào những mảng hay các đối tượng chỉ đơn giản là bạn xử lý chúng thông qua các Node (thành phần cơ bản cấu thành mọi thành phần khác. Khi bạn touch trên màn hình, bạn chỉ cần xử lý những đối tượng (node) theo chuẩn của bạn dựa vào tên của các Node. Đơn giản vậy thôi.

 

* Dùng 2 action đồng thời trong cùng một SKAction:

        SKSpriteNode *wheel = (SKSpriteNode*)[self childNodeWithName:@”wheel”];

CGFloat circumference = wheel.size.height * M_PI;

SKAction *oneRevolution = [SKAction rotateByAngle:-M_PI*2 duration:2.0];

SKAction *moveRight = [SKAction moveByX:circumference y:0 duration:2.0];

SKAction *group = [SKAction group:@[oneRevolution, moveRight]];

[wheel runAction:group];

 

* Thêm một particle vào trong ứng dụng:

 

– (SKEmitterNode *) newExplosion: (float)posX : (float) posy

{

SKEmitterNode *emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@”FireX” ofType:@”sks”]];

emitter.position = CGPointMake(posX,posy);

emitter.name = @”explosion”;

emitter.targetNode = self.scene;

emitter.numParticlesToEmit = 1000;

emitter.zPosition = 2.0;

return emitter;

}

=> Với dòng lệnh (function) này thì chúng ta có thể gọi ở nhiều nơi mà không cần phải viết lại nhiều lần

Đưa Particle theo vòng tròn vĩnh viễn

NSString *myParticlePath = [[NSBundle mainBundle] pathForResource:@”particle” ofType:@”sks”];

SKEmitterNode *myParticle = [NSKeyedUnarchiver unarchiveObjectWithFile:myParticlePath];

//    myParticle.particleAction = 1.0;

[self addChild:myParticle];

CGPathRef circle = CGPathCreateWithEllipseInRect(CGRectMake(0,0,400,400), NULL);

SKAction *followTrack = [SKAction followPath:circle asOffset:NO orientToPath:YES duration:1.0];

SKAction *forever = [SKAction repeatActionForever:followTrack];

[myParticle runAction:forever];

* Ghi chú: Với tên gọi của các Node cần có tiếp đầu ngữ (pre) thì chỉ tóm gọn trong 3 chữ để có thể làm việc về sau, nếu không rất dễ trùng tên với các node khác ở trong ứng dụng tạo ra các dòng lệnh lỗi khộng tốt.

* Chụp hình toàn màn hình với Sprite Kit:

        UIWindow *keyWindow = [[UIApplicationsharedApplication] keyWindow];

        CGRect rect = [keyWindow bounds];

        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0.5f);

        [self.viewdrawViewHierarchyInRect:rect afterScreenUpdates:YES];

        UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

viewImage sẽ trả về một hình toàn màn hình của Iphone/Ipad và bạn có thể chia sẽ trên Facebook với code khác.

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: