Thiết bị vệ sinh cao cấp Italisa

Người đăng: chisenhungsuutam on Thứ Bảy, 2 tháng 8, 2014

Thiết bị vệ sinh cao cấp Italisa (http://italisa.vn/) là một website đã có tác động của SEO, và đã có một số thành công nhất định, tuy nhiên kết quả chưa cao.

Bài viết này tập trung vào phân tích italisa.vn ở thời điểm chưa SEO và sau khi SEO cũng như ưu nhược điểm của phương pháp SEO.

I. VỀ WEBSITE http://italisa.vn/:Trước khi SEO

 

1. Thứ hạng từ khóa

 

Phần lớn từ khóa đều chưa có thứ hạng. 1 vài từ đã có thứ hạng nhưng còn cách top 10 khá xa

Nội thất cao cấp Italisa

 

2. Cấu trúc website– Onpage

 

- Trừ trang chủ tất cả các trang con đều chưa được tối ưu SEO.

Nội thất cao cấp Italisa

- Thẻ H1 để trống, chưa tận dụng được thẻ H2.
- Link Url không hỗ trợ SEO và trùng lặp nội dung
- Có rất nhiều link trùng lặp
Ví Dụ:
http://italisa.vn/index.php?route=common/home
- Tilte bài sản phẩm: chưa tối ưu SEO cũng như tạo sự kích thích đối với người dùng
- Description: Nhồi nhét từ khóa và kém hiệu quả đối với google cũng như người dùng.  Chưa tận dụng được description nhằm tối ưu SEO
- Xml sitemap: Có
- Robot.txt: Có
- Google analytics: Chưa có

3. Backlink - Offpage :

 Chưa được xây dựng

Nội thất cao cấp Italisa

 

4. Mạng xã hội

 

 Hoàn toàn bỏ ngỏ mặc dù website có tích hợp nút chia sẻ MXH

5. Nhận xét chung

 

Website chưa tiến hành SEO ( tác động của SEOer ).

Ưu điểm website: Không có

Nhược điểm Website:
Về mặt kỹ thuật
-    Url không thân thiện 
-    Trùng lặp nội dung
-    Chưa tối ưu SEO

Về mặt người dùng
-    Nội dung còn giới hạn ở thông số kỹ thuật chưa đủ hấp dẫn người dùng.
-    Thiếu những bài viết chia sẻ, hướng dẫn hay giúp người dùng hiểu về sản phẩm.
-    Cách mua hàng.

6. Tư vấn

 

Nên xây dựng website mới tối ưu SEO để giảm bớt thời gian, công sức cũng như chi phí không cần thiết.

II. Phân tích Đối thủ

 

1. Top 10 :www.cesar.com.vn 

 

Nội thất cao cấp Italisa

Onpage
Ngoài  url thân thiện title, meta description chưa được tận dụng. Bố cục thẻ H1, H2 chưa tối ưu.

Backlink
Lượng backlink đổ về trang chủ tương đối lớn. 38k link / 57 domain.

Nội thất cao cấp Italisa

Tuy vậy back link chủ yếu là back link site wide hay toàn trang . Chất lượng backlink thấp.

Nội thất cao cấp Italisa

Nội thất cao cấp Italisa

Độ đa dạng từ khóa kém, chênh lệch giữa từ khóa chính và các từ khóa liên quan là quá nhiều 76% so với 24%

Mạng xã hội
Còn bỏ ngỏ chưa được phát triển

2. Top 9: http://cuongquoc.com.vn

 

Nội thất cao cấp Italisa

Onpage
Đã tận dụng title và description tương đối. Tuy nhiên bố cục thẻ H1, H2 chưa tối ưu

Backlink
Lượng backlink đổ về trang chủ lớn: 87k link / 27 domain

Nội thất cao cấp Italisa

Nội thất cao cấp Italisa

Tuy vậy cách làm SEO tương tự cesar.com.vn . Back link chủ yếu được đặt ở side wide ( toàn trang) với chất lượng link trung bình.

Độ đa dạng từ khóa kém, sự chênh lệch giữa từ khóa chính và các từ khóa liên quan là quá nhiều 72% so với 28% 

Nội thất cao cấp Italisa
Mạng xã hội
Tương tự cesar.com.vn cuongquoc.com.vn vẫn bỏ ngỏ chưa phát triển MXH

Nhận xét chung
Cả 2 đối thủ áp dụng cách làm SEO cũ từ 2012 spam backlink không theo xu hướng SEO hiện tại. Đây là cách làm  SEO không bền vững và rất dễ bị Google phạt.

III. VỀ WEBSITE http://italisa.vn/: sau khi SEO

 

italisa.vn/ bắt đầu SEO từ giữa tháng 5/2014. Kết quả đạt được như sau:

Nội thất cao cấp Italisa

Italisa đã thay đổi keyword, các từ khóa tập trung vào Catalogue. Một số đạt top 1, một số ở trang 2,3 và có vài từ còn ở mới chỉ ở top 100.

Phương pháp SEO chỉ yếu tập trung vào việc buildlink, với khoảng 2k link từ 49 domain. Lượng backlink này không phải là lớn, và khá phù hợp với thời gian SEO 2,5 tháng.

Nội thất cao cấp Italisa

Tỉ lệ đa dạng tên miền là 1/40, chưa được tốt. tuy nhiên 3/4 tổng lượng link được đổ về là từ một website duy nhất - Một website trong hệ thống: italisa.com

Nội thất cao cấp Italisa

Mạng xã hội vẫn chưa được chú trọng, xây dựng. Các chỉ số +, like, twitter gần như là không.

Nội thất cao cấp Italisa

Một vấn đề nữa là nội dung vẫn chưa hoàn thiện. Mặc dù có hơn 500 index, nghĩa là sẽ có khoảng 350 bài viết trên thực tế, nhưng các bài về sản phẩm vẫn chỉ có vài dòng mô tả vắn tắt. Bài tư vấn chưa có.

Nội thất cao cấp Italisa

Đánh giá phương pháp SEO:

Phương pháp SEO website tập trung chủ yếu vào việc buildlink. Mặc dù đã có một số kết quả ban đầu, nhưng phương pháp này vẫn tiềm ẩn nhiều rủi ro, vì việc đặt backlink all page có thể bị Google phạt bất cứ lúc nào. Hoặc giả trong tương lai, khi cạnh tranh trở nên khốc liệt hơn, đối thủ có thể report bất cứ lúc nào.

Việc không tổ chức nội dung, trong khi nội dung trang tiếng Anh được tổ chức tốt hơn, có thể do thị trường tập trung vào khách nước ngoài, hàng xuất khẩu. Tuy nhiên việc thiếu nội dung chi tiết sản phẩm, tư vấn sẽ làm giảm hiệu quả SEO. SEO khó lên hơn, và sau khi lên, khách hàng vào cũng rất khó đặt hàng, vì thiếu thông tin.

IV. Định hướng SEO cho http://italisa.vn/

 

- Viết nội dung chất, giải đáp được các nhu cầu về thông tin của khách hàng. Có hệ thống bài viết giới thiệu sản phẩm riêng, hệ thống bài viết tư vấn, hướng dẫn sử dụng riêng.

- Đi backlink chất lượng. Build link trên các diễn đàn về nội thất, xây dựng

- Xây dựng 1 blog vệ tinh để hỗ trợ site chính.

- Phát triển fanpage và tăng cường chia sẻ thông tin trên G+, facebook

( - Nghiên cứu đặt banner trên các báo, tạp chí về xây dựng, nội thất.

- Xây dựng các kế hoạch truyền thông, khuyến mãi tại showroom. Nhân đó đẩy mạnh truyền thông trên môi trường trực tuyến).

More about

Chia sẻ link hay nhận ngay tiền mặt

Người đăng: chisenhungsuutam on Thứ Sáu, 1 tháng 8, 2014


Đây là lần đầu tiên 1 website tại Việt Nam đưa ra chương trình chia sẻ link tài liệu có thể kiếm tiền cho các thành viên. Đồng thời với chương trình này nếu bạn vừa là người đăng tài liệu vừa chia sẻ tài liệu thì cơ hội kiếm được doanh thu sẽ tăng gấp đôi.

Thêm lợi ích khi bạn upload tài liệu để bán trên 123doc :


- Khi tài liệu của bạn được quản trị duyệt, bạn sẽ nhận được 500 VNĐ/ 1tài liệu ( Lưu ý: Tài liệu Upload phải dài từ 10 trang trở lên).
- Nhận thêm 2 VNĐ/ 1 view trên tài liệu bạn đã upload.
- Nhận đươc 70 % giá trị tài liệu khi tài liệu của bạn có người mua ( giá tài liệu do bạn từ đặt giá)

Các bước tham gia:

1. Bạn Đăng ký tài khoản hoặc đăng nhập TẠI ĐÂY   (Tham gia hội nhóm để giúp nhau cùng tăng thu nhập Tại đây )
2. Vào chi tiết bất kỳ tài liệu nào trên 123doc và lấy link chia sẻ 
3. Chia sẻ link cho bạn bè qua email, trên diễn đàn và các mạng xã hội...

4. Nhận tiền từ việc chia sẻ link tài liệu của bạn:
1 lượt click vào link = 10 vnđ
1 lượt mua qua link = 10% giá trị tài liệu
* Tổng doanh thu bán, doanh thu xem và chia sẻ của bạn lớn hơn 100.000 là có thể nhận ngay tiền mặt hoặc chúng tôi sẽ tự động chuyển ngay vào tài khoản Bảo Kim.
Dễ dàng quản lý tài khoản:
 
                                                              

                               
Chia sẻ càng nhiều bạn sẽ xuất hiện trên top doanh thu


Thật dễ dàng phải không nào ? Hãy VÀO ĐÂY để đăng kí tham gia nhé !

Lưu ý: Sau khi đăng kí xong, bạn có thể VÀO ĐÂY để tham gia hội nhóm giúp nhau tăng thu nhập từ trang này nhé !



More about

Tổng đài điện thoại VCTel

Người đăng: chisenhungsuutam

Tổng đài điện thoại VCTel là một website được thành lập và hoạt động khá lâu (trước 2010) và là một trong những website được tiếp cận với SEO khá sớm.

Trong một thời gian dài, các từ khóa của VCTel đều đứng top, cho đến khoảng thời gian 1 năm trở lại đây thì bắt đầu tụt  dần; nguyên nhân chủ yếu là vẫn theo phương pháp "SEO của ngày hôm qua" chưa kịp thời thay đổi cho phù hợp với tình hình thực tế.

I. NHẬN XÉT VỀ WEBSITE

 

1. Về thứ hạng từ khóa SEO

 

Vctel.com chủ yếu tập trung SEO cho trang chủ với rất nhiều từ khóa khác nhau (27) từ khóa.
Chỉ có 3 từ khóa có mặt trên top 100 của Google.com.vn

Tổng đài điện thoại VCTel

2. Cấu trúc thẻ <H>


Khá tốt và hợp lý tại trang chủ, bao gồm 1 thẻ <H1> và 7 thẻ <H2> tương ứng với các nhóm sản phẩm.
Tổng đài điện thoại VCTel

Nhưng không chuẩn ở bài viết, tồn tại 2 thẻ <H1> => google khó nhận biết và ưu tiên cái gì. “Văn bản gốc” không phải là từ khóa và nội dung cần tối ưu.

Tổng đài điện thoại VCTel

 

3. Bộ keyword

 

Vctel.com có xu hướng nhồi nhét từ khóa trong bộ keywrod
- Thừa kí tự => Google không hiển thị hết
- Viết không tự nhiên, mang tính chất liệt kê từ khóa
- Tite thiếu tự nhiên, không tập trung cho sản phẩm mà chỉ tập trung cho thương hiệu Vctel. Tiêu đề chứa quá nhiều thông số kĩ thuật, gây khó khăn cho người đọc và tìm kiếm.
- Descriptions không miêu tả được sản phẩm, dịch vụ một cách cô đọng – hấp dẫn mà thường mang tính liệt kê
- Keyword nhồi nhét quá nhiều, chung chung, không phải riêng cho từng sản phẩm.

Tổng đài điện thoại VCTel

Keyword Catalogue nhóm Tổng đài điện thoại
Tổng đài điện thoại VCTel

Keyword Catalogue nhóm Tổng đài panasonic
Tổng đài điện thoại VCTel

Keyword bài: Tổng đài panasonic kx-Tes 824-5-16

4. Về nội dung


Vctel.com có lượng index khá lớn. Tuy nhiên do đặc trưng là trang bán các sản phẩm công nghệ nên chứa nhiều thông số kĩ thuật. Chỉ một số ít bài có khả năng tổ chức, viết nội dung tốt, cung cấp thông tin chi tiết. Trong khi rất nhiều bài chỉ cung cấp các thông số kĩ thuật.

Hiện tượng trùng lặp nội dung diễn ra khá phổ biến. Ví dụ, tại nhóm Trang chủ  > Camera MicroDigital  > Camera ốp trần đều sử dụng chung một bài viết tại phần Tính năng – Giải pháp, chỉ khác nhau phần Thông số - Kĩ thuật.

Với việc ra đời và nâng cấp các thuật toán liên quan đến nội dung (panda, humming bird) trong thời gian qua, đặc biệt là nửa cuối năm 2013 thì website vctel chắc chắn là một web kém chất lượng trong mắt của Google – công cụ tìm kiếm chủ yếu ở Việt Nam.

5. Về Backlink


Tổng đài điện thoại VCTel

Với tuổi đời và lượng index lớn như Vctel thì số lượng 109.000 backlink không phải là nhiều (con số này có thể lớn hơn nếu xem trong webmaster tool). Tuy nhiên lượng referring domain quá ít, chỉ đến từ 156 tên miền.

Có thể thấy rằng hình thức build link chủ yếu của Vctel là lấy đặt link all page. Điều này là cực kì nguy hiểm vì Google ngày càng khắt khe hơn với hình thức này, thậm chí coi đây là một hình thức Spam.

Trong đợt càn quét cuối tháng 2/2014 vừa rồi, rất  nhiều website trùng lặp nội dung, có lượng backlink lớn, all page đã bị đánh tụt với hàng loạt từ khóa, thậm chí nhận được thông báo áp dụng “tác vụ thủ công” từ Google.

Quan sát kĩ hơn hình dưới:

Tổng đài điện thoại VCTel

Chúng ta có thể nhận ra thấy lịch sử đi link của vctel. Lượng backlink khá lớn và ổn định trong một thời gian dài. Tuy nhiên ở tháng 8 năm 2013 – thời điểm Google cập nhật thuật toán Penguin 2.0 thì có sự đi xuống, sau đó được xây dựng lại, lượng refering domain cũng tăng nhiều nhưng không đáng kể (từ 110 lên 160).

Quan sát kĩ hơn, hình dưới cho chúng ta thấy trong 3 tháng gần đây lượng backlink của vctel tụt hàng ngày, và được bổ sung hàng ngày để bù đắp.

Tổng đài điện thoại VCTel

Tuy nhiên như đã phân tích ở trên các backlink mới không có sự đa dạng hóa, ngoài ra chất lượng backlink cũng rất thấp.

Quan sát hình dưới chúng ta thấy 2/3 lượng backlink đến từ trang thegioioto.com.vn .

Tổng đài điện thoại VCTel

Tổng đài điện thoại VCTel
Hình thức buildlink trên website thegioioto

Đây là một trang có lượng traffic khá, tuy nhiên pr=0, chỉ số pa/da cũng thấp: 17/27. Cách đặt link cũng chưa thật chuẩn:

- Thông qua một đoạn văn bản dài

- Banner và văn bản cùng chỉ về 1 trang chủ

Tham khảo thêm một số link khác ta thấy còn một vấn đề khác cũng rất nguy hiểm

Danh mục
pr
pa
da
index
alexa
http://thegioioto.com.vn/
0
17
27
90,700

http://www.op.com.vn/
Ko tồn tại
http://www.vctel.net/
3
28
18
5400
0
http://www.vctel.com.vn/
3
27
17
5560
70345
http://vctel.vn/
Đã gỡ

Đó là việc vctel xây dựng website vệ tinh (http://www.vctel.net/http://www.vctel.com.vn/) sử dụng cùng một bộ code, cùng giao diện, cùng host, cùng cơ sở dữ liệu (trùng nội dung) => Duplicate content – Goolge sẽ hiểu đây là một hệ thống Spam và có thể phạt tất cả các site trong cùng hệ thống.
Cuối cùng, các ancho text đều không phải từ khóa cần SEO

Tổng đài điện thoại VCTel

 

6. Về Mạng xã hội

 

Vctel chưa chú trọng đến mạng xã hội, chia sẻ nội dung và phát tán thông tin qua MXH cũng như tương tác là rất ít.

Tổng đài điện thoại VCTel

II. ĐÁNH GIÁ ĐỐI THỦ TOP1: tongdai.com.vn

 

1. Onpage

 

- Nắm domain key: tongdai.com.vn
- Có keyword chuẩn
Tổng đài điện thoại VCTel
Keyword của nhóm sản phẩm
Nhận xét chung

+ Title chứa từ khóa, viết khá tự nhiên, ngắn gọn.
+ Miêu tả chứa từ khóa, ngắn gọn, tự nhiên, bổ sung được thông tin cho tilte
+ Keyword chứa từ khóa, phục vụ riêng cho từng nhóm sản phẩm, bài viết

Phân tích keyword cho từng bài viết

Tổng đài điện thoại VCTel

Keyword một bài cụ thể

+ Title: Là từ khóa dài (đã bao hàm từ khóa ngắn), không quá 65 ký tự (hiển thị đầy đủ trên Google)
+ Miêu tả: được viết riêng cho từng bài, chứa từ khóa, miêu tả được ngắn gọn sản phẩm, hỗ trợ được title. Hơi dài
+ Keyword: chứa từ khóa dài, từ khóa ngắn, từ khóa không dấu và viết riêng cho từng sản phẩm.
- Cấu trúc thẻ <H>
Chưa chú trọng tận dụng thẻ <H2>

Tổng đài điện thoại VCTel

 

2. Offpage

 

- Backlink
Tổng đài điện thoại VCTel

Ít hơn nhưng đa dạng hơn so với vctel. Tỉ lệ 100 backlink/1domain
Cũng diễn ra những biến đổi lớn về link sau thời điểm penguin 2.0 cập nhật
Tổng đài điện thoại VCTel

Tổng lượng backlink giảm nhưng được bù lại bằng sự đang dạng hóa tên miền.

Tổng đài điện thoại VCTel

Chất lượng backlink rất tốt vì hầu hết được lấy từ các trang có độ uy tín cao và liên quan đến công nghệ.
- Anchortext được đa dạng hóa và xoay quang từ khóa chính: tổng đài
Tổng đài điện thoại VCTel

3. Mạng xã hội

 

Tổng đài điện thoại VCTel

Chưa được chú trọng


4. Nhận xét


Tongdai.com.vn được SEO khá tốt và đi theo hướng SEO tổng thể: SEO cho từng bài viết, SEO cho catalogue và cho từ khóa hot trên (trang chủ).

Cả onpage và offpage đều khá chuẩn

III. ĐỊNH HƯỚNG SEO CHO WEBSITE Vctel.com


1. Tái cấu trúc lại web


Rà soát và chỉnh sửa các lỗi, tối ưu lại cho phù hợp với các tiêu chuẩn SEO mới.

Đặt lại các thẻ H1 - H3 hợp lý hơn

2. Nội dung


Gỡ bỏ các nội dung trùng lặp

Viết giới thiệu ngắn gọn cho từng sản phẩm (100 – 200 từ)

Tối ưu lại mật độ từ khóa

Tăng cường liên kết nội bộ

3. Keyword


Viết lại keyword cho trang chủ, nhóm sản phẩm, từng sản phẩm cụ thể.

- Title: Ngắn gọn, chứa từ khóa dài (có thể trùng với tiêu đề bài viết)

- Description: tự nhiên, chứa từ khóa, làm rõ và bổ sung cho title

- Keyword: chứa từ khóa và xác định cho từng bài viết cụ thể

4. Backlink


Gỡ bỏ balink từ các trang kém chất lượng, đặt biệt là từ 2 website vệ tinh có cùng nội dung y hệt site chính

Song song với gỡ là buil link mới theo tiêu chí: đa dạng hóa liên kết.

Các trang builink sẽ: cùng lĩnh vực, có độ uy tín, traffic cao

5. Vệ tinh


Về lâu dài vctel cần xây dựng 3 – 5 vệ tinh chất lượng cao để chủ động về nguồn link. Vệ tinh sẽ tập trung vào các mảng, thị trường ngách mà vctel đang kinh doanh; bài tư vấn, hỏi đáp về sản phẩm, dịch vụ.

Vệ tinh được xây dựng chất lượng trên cơ sở nghiên cứu và đánh giá kĩ, thị trường, xu hướng, từ khóa.

6. Mạng xã hội


Xây dựng trên các MXH: facebook, twitter, G+

Coi đây là các kênh truyền thông riêng biệt, hỗ trợ đưa thông tin đến với người dùng

Về lâu dài có thể coi MXH như một kênh bán hàng độc lập với web site

(Nên) phát triển thêm mảng youtobe để kết hợp SEO video, tăng cường sự hiện diện trên bảng xếp hạng của Google và chuyển đổi traffic, time onsite giữa mxh và site chính.

--- END---
More about

Bài 29: Học làm game thứ 5 - Space Ship ( Part 1 )

Người đăng: chisenhungsuutam

Hi, Lâu nay bận kiếm cơm nuôi cái dạ dày nên ít có thời gian post bài. Cơ mà, nếu mọi người đã đọc được tới đây rồi thì đã có thể độc lập nghiên cứu rồi đấy. Mình thấy nhiều bạn tiến cũng khá xa rồi ( lạc hậu rồi ). Tuy nhiên lúc rảnh rỗi mình vẫn cứ viết bài thôi, vì đây là Blog học tập của mình mà, nếu bạn nào rảnh rỗi thì vào ôn luyện lại cũng không sao, có gì mình không đúng thì chỉ giúp, OK?

Trong bài học làm game thứ 5 này, mình sẽ cùng mọi người làm 1 cái game nho nhỏ, tên là Space Ship, tất nhiên là dạng đơn giản thôi, chứ phức tạp quá thì lại phải trình bày, chia part khá nhọc. Mọi người thông cảm, hi vọng trong tương lai sẽ post được những bài công phu, chuẩn mực hơn.

Bài code này mình nhặt nhạnh trên mạng thôi, ở trang http://www.raywenderlich.com/ thì phải, code trên phiên bản 2.x. Mình đã convert lại sang 3.x theo đúng cách làm ở bài trước, và có sửa đổi thêm thắt một chút để chuẩn hơn. Nói trước là bài này chỉ là một bài mẫu nên code khá thô, không thiết kế thành nhiều lớp phức tạp, chức năng cũng đơn giản, không cầu kỳ. Do đó bạn nào muốn tham khảo 1 bài học làm game chuẩn mực: Thiết kế lớp tốt, nhiều chức năng, màu mè đồ họa, code tối ưu, có khả năng tái sử dụng trong nhiều dự án thì không nên đọc bài này. Bạn có thể tìm được những bài nâng cao của Game này ở trên mạng nhé.

Trong Part 1 này, chúng ta sẽ có thể làm được những công việc sau:

+ Tái sử dụng lại lớp Parallax ở bài trước, bài 25
+ Thiết kế màn chơi cho game

Bắt đầu

B1: Tái sử dụng lớp Parallax

Trước tiên bạn tạo 1 Project mới, SpaceShip
Copy 2 file ParallaxNodeExtras.h, .cpp từ bài 25 vào Class
Mở file ParallaxNodeExtras.cpp lên ta sửa hàm updatePosition 1 chút như sau
Xóa hết đoạn code trong lệnh if(po->getChild() == node)
thay bằng đoạn sau

if(po->getChild() == node)

if (node->getContentSize().width<visibleSize.width)
{
po->setOffset(po->getOffset() + Point(visibleSize.width + node->getContentSize().width,0));

}else {
// Mục đích chỗ này áp dụng cho với những đối tượng có chiều rộng > màn hình sẽ di chuyển đúng po->setOffset(po->getOffset() + Point(node->getContentSize().width*2,0));
}

B2: Thiết kế màn chơi

Mở file HelloWorldScene.h lên, lớp này được thiết kế như sau

#include "ParallaxNodeExtras.h"

USING_NS_CC;

using namespace cocos2d;

class HelloWorld : public cocos2d::Layer
{
private:

SpriteBatchNode * _batchNode; // Batch node để lưu các đối tượng có Action
Sprite * _ship;

    ParallaxNodeExtras *_backgroundNode; // Backround là 1 đối tượng Parallax
    Sprite *_spacedust1; // đám bụi 1
    Sprite *_spacedust2; // đám bụi 2
    Sprite *_planetsunrise; // hành tinh
    Sprite *_galaxy;      // thiên hà
    Sprite *_spacialanomaly;  // chịu
    Sprite *_spacialanomaly2;   // chịu

    // Vector để lưu các thiên thạch, dạng con trỏ
    Vector<Sprite*>* _asteroids;
    // Chỉ số để truy cập
    int _nextAsteroid;
    float _nextAsteroidSpawn;  // Thời gian xuất hiện thiên thạch tiếp theo
    float _nextAsteroidtimer;       // Bộ định thời ( hay bộ đếm thời gian, cứ 1 khoảng thời gian thì làm 1 việc gì đó
    // 1 Vector để lưu đạn Laser của tàu, dạng con trỏ
    Vector<Sprite*>* _shipLasers;
    // index
    int _nextShipLaser;
    
    int _lives; // mạng  

    void update(float dt);

    PhysicsWorld* _world;
    void setPhyWorld(PhysicsWorld* world){ _world = world; };
    
public:
    virtual bool init();

    bool onContactBegin(const PhysicsContact& contact);

    static cocos2d::Scene* createScene();
    
    void menuCloseCallback(Ref* pSender);

    CREATE_FUNC(HelloWorld);    

    //Lấy giá trị random trong 1 khoảng
    float randomValueBetween(float low, float high);
    // Ẩn đi
    void setInvisible(Node * node);
    void onTouchesBegan(const std::vector<Touch*>& touches, Event *event); // Multi Touch
};

#endif // __HELLOWORLD_SCENE_H__

OK, sang bước tiếp theo, mở file HelloWorldScene.cpp, ta thiết kế các function như sau:

À nhớ phần include thêm đoạn code sau

#include "SimpleAudioEngine.h"
using namespace CocosDenshion;

using namespace cocos2d;
using namespace CocosDenshion;
using namespace std;

// Định nghĩa các Tag, cho 3 loại đối tượng
enum 
{
KSHIP,
KLASER,
KASTEROID

};

// Hàm tạo Scene với Physics, đơn giản quá rồi
Scene* HelloWorld::createScene()
{
    Scene *scene = Scene::createWithPhysics();
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
Vect gravity(0.0f, 0.0f); // Vector gia tốc =0
scene->getPhysicsWorld()->setGravity(gravity);  
    HelloWorld *layer = HelloWorld::create();
layer->setPhyWorld(scene->getPhysicsWorld());
    scene->addChild(layer);

    return scene;
}

Hàm HelloWorld::init()

//Nạp Resource

Size visibaleSize = Director::getInstance()->getVisibleSize();
Size winSize = Director::getInstance()->getWinSize();
_batchNode = SpriteBatchNode::create("Sprites.pvr.ccz"); // File này là file ảnh đã mã hóa, tạo bởi TexturePacker nhé, ko mở được bằng trình xem ảnh thông thường, mở = PVR view của soft TexturePacker, hoặc soft tương tự
this->addChild(_batchNode);
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Sprites.plist");  

//Dựng các vật thể

_ship = Sprite::createWithSpriteFrameName("SpaceFlier_sm_1.png");
_ship->setPosition(Point(visibaleSize.width * 0.1, winSize.height * 0.5));
_ship->setTag(KSHIP); // đặt tag để phân biệt trong va chạm
_batchNode->addChild(_ship, 1); // Insert vào BatchNode để thực hiện Action

// Tạo body cho Ship, -23 là offset, vì ảnh cắt ko chuẩn nên thừa ra khoảng trống nhiều, mình phải giảm bớt kích thước body cho chuẩn,
auto shipBody = PhysicsBody::createCircle(_ship->getContentSize().width / 2-23); 
// Ko có cái này thì không thể xử lý va chạm được
shipBody->setContactTestBitmask(0xf); 
// Va chạm tĩnh
shipBody->setDynamic(false);
_ship->setPhysicsBody(shipBody); 
//Tạo parallax node
_backgroundNode = ParallaxNodeExtras::create();
this->addChild(_backgroundNode,-1) ;

// 2 mảng bụi, add vào Parallax
unsigned int dustQuantity = 2;
for(unsigned int i = 0; i < dustQuantity; i++)
{
auto dust = Sprite::create("bg_front_spacedust.png");
dust->setAnchorPoint(Point(0,0.5));
_backgroundNode->addChild(dust,
0, //order (thứ tự) lớp. Order lớn hơn thì nằm trên che khuất lớp có order nhỏ hơn
Point(0.5, 1), // tốc độ
Point( i*(dust->getContentSize().width),winSize.height/2)); // vị trí
}

// Tạo các vật thể khác, add vào Parallax

_planetsunrise = Sprite::create("bg_planetsunrise.png");
_galaxy = Sprite::create("bg_galaxy.png"); _galaxy->setAnchorPoint(Point(0,0.5));
_spacialanomaly = Sprite::create("bg_spacialanomaly.png");
_spacialanomaly2 = Sprite::create("bg_spacialanomaly2.png");
// Tốc độ di chuyển của vật thể
Point dustSpeed = Point(0.5, 0);
Point bgSpeed = Point(0.05, 0);

// PARALLAX Scolling
_backgroundNode->addChild(_galaxy,-1, bgSpeed, Point(0,winSize.height * 0.7));
_backgroundNode->addChild(_planetsunrise, -1 , bgSpeed, Point(600, winSize.height * 0));
_backgroundNode->addChild(_spacialanomaly, -1, bgSpeed, Point(900, winSize.height * 0.3));
_backgroundNode->addChild(_spacialanomaly2, -1, bgSpeed, Point(1500, winSize.height * 0.9));

// Update scene
this->scheduleUpdate();

// Làm 3 cái Particle trang trí cho game lung linh 1 tí
HelloWorld::addChild(ParticleSystemQuad::create("Stars1.plist"));
HelloWorld::addChild(ParticleSystemQuad::create("Stars2.plist"));
HelloWorld::addChild(ParticleSystemQuad::create("Stars3.plist"));
    
// Giờ thì tạo bộ lưu trữ 

    // Bộ lưu mảng thiên thạch
    #define KNUMASTEROIDS 15
    _asteroids = new Vector<Sprite*>(KNUMASTEROIDS);
    for(int i = 0; i < KNUMASTEROIDS; ++i) {
        Sprite *asteroid = Sprite::createWithSpriteFrameName("asteroid.png");
        asteroid->setVisible(false); // ẩn Sprite vừa tạo, nếu không ẩn, bạn sẽ thấy nó dồn hết về tọa độ 0,0
        asteroid->setTag(KASTEROID);  // đặt tag
        _batchNode->addChild(asteroid); // insert vào batch node
        _asteroids->pushBack(asteroid); // insert vào Vector
    }
    
// Bộ lưu mảng đạn Laser    #define KNUMLASERS 5
    _shipLasers = new Vector<Sprite*>(KNUMLASERS);
    for(int i = 0; i < KNUMLASERS; ++i) {
        Sprite *shipLaser = Sprite::createWithSpriteFrameName("laserbeam_blue.png");
        shipLaser->setVisible(false); 
        shipLaser->setTag(KLASER);
        _batchNode->addChild(shipLaser);
        _shipLasers->pushBack(shipLaser);
    }

 this->setTouchEnabled(true);

    
_lives = 3;
_nextShipLaser =0; // index
_nextAsteroid = 0; // index
_nextAsteroidtimer =0;
_nextAsteroidSpawn = 1.6f; // Cứ 1.6 giây thì xuất hiện 1 thiên thạch
    
// Nạp Audio
    SimpleAudioEngine::getInstance()->playBackgroundMusic("SpaceGame.wav",true);
    SimpleAudioEngine::getInstance()->preloadEffect("explosion_large.wav");
    SimpleAudioEngine::getInstance()->preloadEffect("laser_ship.wav");
return true;

Xong phần init() rùi, giờ tiếp tục dựng một số function game nào

Hàm update(float delta)

Point scrollDecrement = Point(5, 0); // Tốc độ di chuyển của Parallax
Size winSize = Director::getInstance()->getWinSize();

// Update vị trí của Parallax
_backgroundNode->setPosition(_backgroundNode->getPosition() - scrollDecrement);
_backgroundNode->updatePosition();

_nextAsteroidtimer+=delta; // Đếm thời gian

if (_nextAsteroidtimer > _nextAsteroidSpawn) { 

_nextAsteroidtimer = 0; // reset bộ đếm timer

// Vị trí random
float randY = randomValueBetween(0.0,winSize.height);
float randDuration = randomValueBetween(2.0,10.0); // Thời gian di chuyển trên màn hình

// Lấy ra sprite tại index _nextAsteroid
Sprite *asteroid = (Sprite *)_asteroids->at(_nextAsteroid);
_nextAsteroid++;

//reset index
if (_nextAsteroid >= _asteroids->size())
_nextAsteroid = 0;

asteroid->stopAllActions(); // dừng mọi Action
// Đặt lên màn hình, và hiển thị
asteroid->setPosition( Point(winSize.width+asteroid->getContentSize().width/2, randY));
asteroid->setVisible(true);

// Đặt body, -15 là hiệu chỉnh kích thước fix bug của ảnh
auto asbody = PhysicsBody::createCircle(asteroid->getContentSize().width/2-15);
// Xử lý va chạm
asbody->setContactTestBitmask(0xf); 
asteroid->setPhysicsBody(asbody);

// Di chuyển với tốc độ và vị trí cho trước, khi di chuyển tới cuối màn hình, gọi hàm setInvisible, để thực hiện 1 số thao tác
asteroid->runAction(Sequence::create(
MoveBy::create(randDuration, Point( - winSize.width - asteroid->getContentSize().width, 0)), 
CallFuncN::create(CC_CALLBACK_1(HelloWorld::setInvisible,this)), 
NULL
));        
}

OK, giờ xây dựng thêm 1 số hàm phụ là có thể chạy game được rồi

void HelloWorld::setInvisible(Node * node) {
node->setVisible(false); // ẩn đi
_world->removeBody(node->getPhysicsBody()); // remove Body
}

// Lấy Random trong khoảng cho trước
float HelloWorld::randomValueBetween(float low, float high) {
return (((float) rand() / RAND_MAX) * (high - low)) + low;
}


OK rồi đó, build thử game xem có chạy nổi không, Ngon lành nhé

 Cũng khá đẹp đấy chứ!

Trong bài này chúng ta đã cùng nghiên cứu 1 số vấn đề nhỏ sau đây:

+ Sử dụng lại lớp đã được thiết kế từ bài trước, có mở rộng 1 chút
+ Sử dụng Vector để lưu trữ dữ liệu, cái này mình thấy dùng khá nhiều, và cũng khá là hay
+ Tạo bộ lưu trữ đối tượng bằng vector, nạp đối tượng vào bộ lưu trữ khi bắt đầu vào game, ẩn chúng đi...
+ Định thời cho 1 sự kiện theo thời gian

Vậy thôi nhỉ, tuy chỉ là những vấn đề nhỏ, nhưng nhiều vấn đề nhỏ kết hợp lại với nhau nhuần nhuyễn sẽ cho ra vấn đề LỚN đấy.

Download CODE+RESOURCE

Mình dừng bài này ở đây. Hẹn gặp lại

Bài 30: Học làm game thứ 5 - Space Ship ( Part 2 - End )

More about