Monthly Archives: September 2013

Hệ thống mô phỏng vật lý trong Sprite Kit

I. Giới thiệu:

Với sự ra đời của IOS 7, lập trình viên IOS còn được hưởng thêm một lợi ích lớn từ Apple. Đó là một bộ công cụ mới hỗ trợ lập trình game được Apple phát triển dành riêng cho IOS 7. Bộ công cụ không những cung cấp những thành phần cơ bản, cấu trúc của một game mà còn kèm theo một bộ công cụ mô phỏng vật lý cực mạnh lại dễ dàng sử dụng.

II. Khái niệm chung:

Mỗi đối tượng có một thuộc tính là SKPhysicsBody dùng để xác định hình dạng và các thông số mô phỏng  vật lý trong chương trình. Một khi các thông số đã được thiết lập, các cảnh (scene) sẽ tự động tính toán để đưa ra các mô phỏng cho các đối tượng.

Tất cả những gì bạn cần làm để có một môi trường mô phỏng tính vật lý trong game của bạn là:

+ Tạo ra một đối tượng có thuộc tính SKPhysicsBody

+ Cấu hình các thông số của đối tượng

+ Gán các thuộc tính cho đối tượng đó.

+ Đưa đối tượng vào một môi trường vật lý (scene).

Phần còn lại bạn có thể ngồi rung đùi nhìn thiết bị (Iphone, Ipod, Ipad) tự làm những việc còn lại.

III. Phân loại:

Có 3 loại PhysicsBody trong Sprite Kit:

Dynamic Body (Đối tượng linh hoạt): Đối tượng sẽ bị ảnh hưởng bởi các lực vật lý như trọng lực và các tương tác 2 chiều đối với các đối tượng khác. Đối tượng này có khối lượng và trọng lượng riêng. Đây thường là các đối tượng được điều khiển hay các chứng ngại trong game.

Static Volume (Đối tượng tĩnh): Đây thường là các đối tượng môi trường để tạo ra các màn chơi khác nhau. Nó giúp giới hạn vùng hoạt động của các đối tượng chơi. Đây là các đối tượng không có vận tốc và không bị ảnh hưởng bởi các va chạm. Tuy nhiên, đối tượng này vẫn có khối lượng riêng và vẫn tương tác với các đối tượng khác (Các đối tượng khác vẫn có thể bật ra khỏi nó hay va chạm với nó). Ví dụ cụ thể cho Static Volume là các bức tường trong một mê cung hay các chứng ngại tạo sẵn khi màn chơi bắt đầu.

Edge (cạnh): Đây là một đối tượng không có thực thể. Cạnh đại diện một ranh giới. Nó không bao giờ di chuyển và khối lượng của nó cũng không phải là vấn đề để đề cập. Cạnh thường dùng để tạo ra những vùng không gian rỗng không tương tác (phần rỗng bên trong một đối tượng) hay một ranh giới vô hình không thể vượt qua. Các lập trình viên thường dùng cạnh như một ranh giới ngăn cách giữa các cảnh (scene)

HuygamerTutorial

Khác nhau giữa các đối tượng trong Physics Simulator

Lưu ý: Điểm khác biệt giữa Static Volume và Edge là Static Volume vẫn được xem là một đối tượng có hình thể trong khi Edge thì không. Chúng ta có thể dùng Edge cho phép các đối tượng di chuyển trong một vùng không gian riêng của nó. (Huygamer).

* Phần tiếp theo chúng ta sẽ làm các ví dụ về nó

Advertisements

Youtube với 150 bài nhạc miễn phí

Vào ngày 25/09/2013, youtube đã công bố audio library mở rộng cho phép mọi người sử dụng có thể lấy 150 bản nhạc từ youtube về để sử dụng cho bất kì hoạt động sáng tạo nào (có thể không liên quan đến youtube).

Những bản nhạc này có thể làm nhạc nền cho các bản video trong youtube hoặc cho chính game của các bạn trên AppStore. Những bản nhạc này có chất lượng khá cao (320 kbps). Đây là một chức năng chưa từng có trước đây vì youtube chưa hề cho bạn có khả năng download những nội dung kĩ thuật số trên youtube (dĩ nhiên bạn có thể download về nhưng đó thât ra là vi phạm điều lệ bạn kí với google đấy nhá) về để sáng tạo.

Link blog công bố của youtube: http://youtubecreator.blogspot.ch/2013/09/free-music-for-your-youtube-videos.html

Screen Shot 2013-09-27 at 11.00.10 AM

Link để bạn download: http://www.youtube.com/audiolibrary?feature=blog

Game mới của mình trên AppStore: https://itunes.apple.com/us/app/fruit-rush-similar-card/id692172432?ls=1&mt=8

Hướng dẫn cơ bản về Sprite Kit

Đây là hướng dẫn cơ bản giúp bạn có thể có cái nhìn đầu tiên về Sprite Kit.

 

* Điều kiện để bắt đầu:

– Bạn cần phải có:

+ Xcode 5: Xcode là công cụ phải có để bắt đầu làm việc. Đối với Sprite Kit, chúng ta cần phải có Xcode 5 để có được Sprite Kit và hỗ trợ IOS 7. Chuyện này khá là đơn giản nếu bạn sở hữu một máy Mac, Bạn chỉ việc lên AppStore dành cho Mac và download về phiên bản mới nhất vì Apple đã chính thức phát hành Xcode miễn phí vào ngày 20-09-2013.

+ IOS 7: Đây là phiên bản thấp nhất mà Sprite Kit được tích hợp nên bạn cần phải cập nhật IOS 7 cho các iDevices của bạn để bắt đầu làm việc với Sprite Kit.

 

* Các kiến thức cần phải có:

– Lập trình với Sprite kit bạn cần phải hiểu rõ được cấu trúc của nó:

+ Đối với Sprite Kit, chương trình sẽ được chia thành các cảnh (scene) để xử lý những tác vụ nằm trong cảnh đó. Mỗi cảnh lại chứa những đối tượng game (Sprite) được xử lý trong scene.

+ Mỗi đối tượng dù là gì đi nữa vẫn là một sprite để dễ quản lý:

 

– Sprite sử dụng cho những trường hợp sau:

+ Những đối tượng game (character, monster, items,…)

+ Chữ

+ Hình thể phức tạp

+ Video

 

* Bắt đầu:

 

– Đầu tiên dĩ nhiên phải tạo một project mới để làm việc. Với Xcode 5, mọi thứ được làm lại với phong cách phẳng (Flat Design) của Apple nhìn rất gọn nhẹ và đơn giản.

– Bạn sẽ có được một Project như sau:

Image

– Hãy tập trung vào những thứ sau để hiểu rõ chương trình:

+ LKViewController:

 

– (void)viewDidLoad

{

   [super viewDidLoad];

 

   // Setting dành cho view của chương trình

   SKView * skView = (SKView *)self.view;

   skView.showsFPS = YES;

   skView.showsNodeCount = YES;

   skView.multipleTouchEnabled = NO;

   // Tạo scene và set mode cho scene

   SKScene * scene = [LKMyScene  sceneWithSize:skView.bounds.size];

   scene.scaleMode = SKSceneScaleModeAspectFill;

   // Hiển thị scene trên view

   [skView presentScene:scene];

}

 

=> Một view của chương trình thường sẽ hoàn toàn trống như thế. Chúng ta cần phải tạo ra một cảnh game (Scene) để thêm vào các đối tượng và bắt đầu một game. Ở đây, chúng ta sẽ ép view của viewController thành một SKView để bắt đầu game.

=> showFPS và showNodeCount chỉ được hiển thị khi bạn đang làm việc với chương trình để xem các biểu hiện của chương trình. Khi phát hành chính thức bạn cần phải bỏ nó đi.

 

+ LKMyScene.m:

 

-(id)initWithSize:(CGSize)size {

   if (self = [super initWithSize:size]) {

       /* Thêm vào dòng chữ tiêu đề trong lúc khới tạo chương trình */

       self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];

       SKLabelNode *myLabel = [SKLabelNode labelNodeWithFontNamed:@”Chalkduster”];

       myLabel.text = @”Lapkan Tutorial!”;

       myLabel.fontSize = 30;

       myLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

       [self addChild:myLabel];

   }

   return self;

}

 

=> Khởi tạo Scene với dòng tiêu đề sẵn có.

 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

   for (UITouch *touch in touches) {

       CGPoint location = [touch locationInNode:self];

       int i = arc4random() % 6;

       SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:  [NSString stringWithFormat: @”Ipod_stars_0%i.png”, i]];

       sprite.size = CGSizeMake(50, 50);

       sprite.name = @”star”;

       sprite.position = location;

       SKAction *action = [SKAction rotateByAngle:M_PI duration:1];

       [sprite runAction:[SKAction repeatActionForever:action]];

       [self addChild:sprite];

   }

}

 

=> Mỗi khi có một sự kiện chạm vào màn hình thì sẽ ngẫu nhiên sinh ra một ngôi sao có màu khác nhau.

 

Lệnh cập nhật dành cho scene (update):

 

-(void)update:(CFTimeInterval)currentTime {

   [self enumerateChildNodesWithName:@”star” usingBlock:^(SKNode *node, BOOL *stop)

    {

        node.position = CGPointMake(node.position.x – 5, node.position.y);

    }];

}

 

=> Chương trình sẽ tự động cho ngôi sao bay sang trái sau mỗi frame được tạo.

Image

* Kết luận:

– Vậy chúng ta có thể làm ra một chương trình mà khi chạm vào màn hình sẽ tạo ra một ngôi sao có màu sắc ngẫu nhiên và di chuyển về phía bên trái của màn hình.

– Ở những phần sau, tôi sẽ nâng cấp chương trình lên với khả năng tuỳ biến cao hơn.

Source Code: https://docs.google.com/file/d/0B38uO5_VDZL4bEt4Q1E3cE01bTg

Các code thông dụng dành cho IOS (Phần tiếp theo)

Sau đây là những đoạn code mà bạn sẽ sử dụng rất thường xuyên do đó chúng ta sẽ sử dụng code của C++ nhằm tăng hiệu quả cũng như sử dụng chúng dễ dàng hơn so với việc phải code những dòng lệnh dài bằng Objective-C.

+ Chuyển giá trị từ chuỗi thành các kiểu dữ liệu khác:

#define StrToInt(str) [str intValue]
#define StrToInteger(str) [str integerValue]
#define StrToFloat(str) [str floatValue]

+ Chuyển giá trị từ những thứ khác về chuỗi:

#define IntToStr(int) [NSString stringWithFormat:@”%d”, int]
#define Int32ToStr(int) [NSString stringWithFormat:@”%ld”, int]
#define Int64ToStr(int) [NSString stringWithFormat:@”%lld”, int]
#define FloatToStr(float) [NSString stringWithFormat:@”%f”, float]

+ Gắn màu cho những đối tượng:

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

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

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

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

+ Kiểm tra loại máy sử dụng:

#define IS_IPHONE ([[[UIDevice currentDevice] model] isEqualToString:@”iPhone”])

#define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@”iPod touch”])

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

Sprite Kit – Sự hỗ trợ mới đến từ Apple

Trước tiên chúng ta hãy xem qua những điểm lợi và hại của Sprite trước khi bắt đầu:

* Ưu điểm:
– Đây là một thư viện được xây dựng ngay trong IOS nên không cần phải tải thêm bất kì một thư viện số (Extra Libray) hay một mã nguồn nào bên ngoài nữa. Ngoài ra, nó được viết và phát triển bởi chính Apple nên chúng ta có thể biết được rằng nó sẽ được Apple hỗ trợ và cập nhật thường xuyên sớm nhất có thể.
– Có sẵn các công cụ để cắt và thể hiện hiệu ứng ngay trong Xcode (particle)
– Giúp bạn lập trình và quản lý game một cách dễ dàng do cấu trúc của Sprite Kit được thiết kế để làm chuyện đó. Hỗ trợ các dạng video và hiệu ứng hình ảnh đơn giản nhưng chắc chắn sẽ được cải thiện trong tương lai

* Nhược điểm:
– Một khi sử dụng Sprite Kit nghĩa là cuộc sống của bạn sẽ gắn liền với hệ sinh thái của Apple. Nếu bạn muốn đưa game của bạn lên các hệ điều hành khác như Android thì nó gần như là viết lại từ đầu.
– Sprite Kit đang ở thời kì đầu của nó, việc nó thành công hay thất bại là thứ hoàn toàn không chắc chắn. Thêm vào đó, Sprite Kit chưa hỗ trợ cho bạn tham gia vào việc tuỳ chỉnh các mã OpenGL nên đối với những lập trình viên có thâm niên cao thường không thích thú lắm.
– Những thứ bạn đã viết được trên các engine khác như Corona, Cocos2D không phù hợp với Sprite Kit điều đó có nghĩa là bạn đang bắt đầu từ vạch xuất phát cùng với tất cả mọi người.

* Những lựa chọn của bạn:

Có 4 lựa chọn cho mọi người (Những lựa chọn khác thường không được phổ biến hay phải trả tiền nên không được liệt kê ở đây:

+ Sprite Kit

+ Cocos2D- Iphone

+ Cocos2D-X

+ Unity

* Câu hỏi đặt ra là bạn chọn cái gì để phát triển game cho chính bạn đây?

– Câu trả lời phụ thuộc vào mục đích mà bạn đang hướng tới và vị trí của bạn trong ngành lập trình này.

+ Hãy chọn Sprite Kit nếu:

– Bạn hoàn toàn là một người mới

– Bạn tập trung hoàn toàn vào IOS và chưa có ý định làm việc với các hệ điều hành khác như Android và BlackBerry OS

– Bạn muốn thử một thứ gì đó mới mẻ và có tương lai rộng mở

+ Hãy chọn Cocos2D hay những lựa chọn khác

– Bạn muốn can thiệp vào mã nguồn của OpenGL

– Bạn đã có một thư viện hay một tích luỹ khá lớn của các hệ này (Cocos2D)

– Bạn muốn làm việc với một công cụ đã hoàn chỉnh và có nhiều ví dụ trước đó

+ Hãy chọn Cocos2D-X hay Unity:

– Bạn muốn viết game của mình trên nhiều nền tảng như Android

– Bạn muốn quản lý mọi thứ trong game của mình.

 

=> Tôi đã chọn Sprite Kit rồi nên những bài hướng dẫn từ đây về sau chỉ tập trung vào Sprite Kit..

Cocos2D cũng đã từng làm nhưng việc cài đặt khá là rối rắm nếu bạn muốn có những tính năng mới nhất của IOS như ARC hay đơn giản là giao diện phẳng của IOS 7.

Những khái niệm cơ bản về Xcode

XcodeIcon

Xcode là một IDE dành riêng cho việc phát triển phần mêm trên môi trường MAC và cả IOS. Đây là một ứng dụng hoàn toàn miễn phí của Apple nhằm hỗ trợ cho các lập trình viên có thể phát triển các ứng dụng và game dành cho hệ sinh thái của Apple (Tuy nhiên muốn đưa ứng dụng/game của bạn lên bán trên AppStore thì bạn cần trả phí 100 $/năm).

Xcode Screen

Xcode được phát hành miễn phí và cập nhật phiên bản mới nhất trên Store của Mac. Nếu bạn có một máy Mac thì cứ tự nhiên lên download về không mất xu nào lại còn nhanh chóng gọn gàng chưa từng thấy. Đối với những ai chưa có máy Mac thì xin chia buồn, bạn sẽ rất vất vả đấy.

Cho tới tháng 9/2013, Xcode đã được phát triển tới phiên bản 5.0 mang nhiều tính năng mới mẻ và phù hợp với IOS 7.

Nó sẽ hỗ trợ:

* Giao diện kéo thả mạnh mẽ:
+ Hỗ trợ giao diện kéo thả các trình điều khiển như các nhãn (Label), Textbox để lập trình dễ dàng hơn
+ Từ Xcode 4.2 trở lên, Storyboard giúp cho việc liên thông và lập trình giữa các viewcontroller dễ dàng hơn bao giờ hết. Những ông cụ vào từ lúc AppStore mới mở cửa thì không thích điều này. (Nói chung là cái level của mấy thằng cha đó khác mình)
* Hỗ trợ việc lập trình:
+ Chỉnh lại cấu trúc của hàm phù hợp
+ Giúp viết code nhanh hơn bằng phím tắt
+ Quản lý các dự án thông qua manager và các SVN (github)
* Hỗ trợ kiểm thử:
+ Giả lập máy để em có thể kiểm tra tính năng của chương trình
+ Theo dõi và kiểm tra bộ nhớ cho phép chương trình chạy
+ Tạo ra các bot (chương trình tự động) cho phép kiểm tra tính ổn định của chương trình
* Kết nối với Apple:
+ Hỗ trợ đưa chương trình lên AppStore để bán
+ Hỗ trợ các tài liệu.
* Kết luận:
– Xcode là công cụ số một dành cho việc phát triển ứng dụng và game cho Mac OS X và IOS (Dĩ nhiên có một vài công cụ khác cũng cho phép bạn phát triển ứng dụng và game cho Mac OS X và IOS nhưng không thể bằng Xcode công cụ chính thức của Apple).
– Vừa miễn phí lại mạnh mẽ, đây luôn là lựa chọn hàng đầu của các lập trình viên IOS.

Cách đánh dấu của Object C

* #pragma là gì?

Pragma là từ khóa của Objective C để đánh dấu những đoạn mã dài để dễ dàng quản lý về sau.

Đối với những lớp (Class) dài thì việc quản lý từ phần của chương trình khá là khó khăn do không biết nó nằm ở đâu trong hơn 2.000 đến 3.000 dòng code. Đối với Objective C thì chúng ta có công cụ #pragma Tên section để có thể đánh dấu những phần khác nhau của cùng một đoạn code.

#pragma lkMarking

Chúng ta có thể dùm Jump Bar nằm phía dưới cửa sổ làm việc để nhảy thằng tới những phần đã đánh dấu. Ngoài ra còn có chức năng để tạm rút gọn những đoạn code nằm trong 1 pragma

Project-> Thư mục > FileClass -> pragma mark | methods

Đây là tính năng quen thuộc của hầu hết các IDE.

* Đối với C# chúng ta sẽ có region để đánh dấu những đoạn mã như thế. Cú pháp

#region lkSection

#endregion

– Và IDE Visual Studio hỗ trợ trực tiếp.