Thủ thuật xây dựng thương hiệu blog

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

Để người xem sớm quay lại với blog của mình và tìm kiếm những thông tin có ích do mình viết thì hãy tạo cho khách hàng một điều gì đó để nhớ về bạn - Đó chính là thương hiệu blog. Hôm nay mình sẽ chia sẻ một số yếu tố cơ bản tạo nên thương hiệu blog. 
1. Giao diện
Hãy chọn bố cục và màu sắc thích hợp với chủ đề mà bạn lựa chọn để viết blog. Bố cục hiện nay đang được ưa chuộng là dạng 2 cột hoặc không có cột nào. Các bài viết được thể hiện rõ hơn, người đọc dễ dàng xem những hình ảnh đẹp trong bài viết. 
Màu sắc giao diện là yếu tố rất quan trọng để khách hàng nhớ đến blog của bạn. Bạn nên thống nhất một đến 2 màu chủ đạo cho toàn blog để tránh tình trạng bị rối mắt và không có điểm nhấn. Hiện màu chủ đạo mà mình đang sử dụng trong blog này là màu xanh da trời và màu trắng.
Màu sắc của giao diện tùy  vào lĩnh vực mà bạn đang viết blog. Một số gợi ý về màu sắc khi làm blog
- Lĩnh vực đào tạo internet thì chọn màu xanh da trời
- Nếu bạn bán quần áo phụ nữ, dịch vụ spa thì chọn màu tím tươi
- Nếu bạn làm cho lĩnh vực giáo dục thì cũng chọn màu tím nhưng là màu tím đậm.
- Nếu bạn bán hàng công nghệ điện tử thì chỉ chọn màu trắng và đen là hợp lý,...
2. Logo đặc biệt
Đặc biệt là những blog được thành lập để bán hàng thì logo là rất cần thiết. Nó sẽ giúp khách hàng nhận diện thương hiệu sản phẩm và tránh tình trạng ăn cắp hình ảnh, sản phẩm từ những người khác. 
Bạn có thể tự thiết kế cho mình một logo phù hợp bằng phần mềm: AAALogo: Phần mềm thiết kế logo hay
Hoặc đi thuê nếu bạn muốn logo đó thật chuyên nghiệp. 
Về cơ bản thì logo phải thể hiện được ý tưởng xuyên suốt quá trình bạn muốn làm, hình ảnh minh họa càng đơn giản càng tốt, màu sắc logo phải thật rõ ràng, tránh trùng với logo khác. 
logo đặc biệt cho blog
Logo là việc cần làm trước tiên khi bạn tiến hành xây dựng thương hiệu blog để chia sẻ hoặc bán một sản phẩm nào đó trên internet.
3. Nội dung
Yếu tố nội dung quyết định khách hàng sẽ ở lại blog của bạn trong bao lâu.  Nếu bạn xây dựng được một nội dung hấp dẫn, mới lạ và có ích cho mọi người thì họ sẽ ở lại với bạn lâu hơn và họ còn quay lại nhiều lần khác nữa. 
Hãy trình bày nội dung một cách ngắn gọn, dễ hiểu và pha chút phong cách của riêng bạn để họ biết rằng bạn là một người đặc biệt không giống ai. Và thông qua thương hiệu blog, thương hiệu cá nhân của bạn cũng ngày càng tăng lên. 
Dù thế nào thì chúng ta cũng không nên đi copy bài của người khác lên blog của mình, làm như vậy bạn sẽ tự hủy hoại blog của mình đó. Vì google không thích như vậy. 
Bạn có thể tham khảo để chọn cho mình một phong cách viết blog hoặc kết hợp tất cả tại bài viết này: Viết Blog Theo "Phong Cách" Nào?
4. Phản hồi
Sẽ thế nào nếu cả tháng trời mà các câu hỏi, bình luận về bài viết không được hồi đáp? Khách hàng sẽ nghĩ rằng blog không còn hoạt động nữa hoặc blog đó chỉ là một cái máy post tin. 
Hãy hồi đáp những bình luận một cách sớm nhất có thể, đừng để họ chạy sang trang khác để tìm kiếm thông tin đó nhé. 
Hãy thật nhiệt tình, thân mật và cởi mở với mọi khách hàng để họ nhớ đến bạn nhiều hơn. Khi đó họ sẽ quay lại với bạn thường xuyên hơn và bạn sẽ bán được hàng. 
phản hồi bình luận trên blog
Trên đây là một số những điều cơ bản để xây dựng nên thương hiệu blog, bạn có thể tham khảo và bổ sung thêm để phát triển blog ngày càng lớn mạnh hơn nhé.
More about

Bài 20: Học làm game thứ 3: Sushi Crush - Like Candy Crush or Bejewer ( Part 1)

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

Hi mọi người!

Vậy là chúng ta đã cùng nhau làm xong 2 Game đơn giản ở những bài trước. Trong bài này mình sẽ hướng dẫn các bạn làm 1 game khó hơn, giống như là Candy Crush, và Bejewer nhé.

À tiện đây mình cũng muốn nói đôi lời. Những ai đang có ý định kiếm mấy game người khác đã chia sẻ code hoặc hướng dẫn làm trên mạng rồi Clone lại, chỉnh sửa tí chút sau đó add quảng cáo rồi tung lên Store để kiếm tiền thì mình có lời như này: XIN ĐỪNG LÀM RÁC các kho ứng dụng theo cách như vậy.

Hãy học làm game một cách chuyên nghiệp, suy nghĩ và sáng tạo ra sản phẩm của riêng mình, mới lạ độc đáo thì sẽ được người dùng đón nhận thôi chứ đừng Clone, nhái, ăn theo => RÁC lắm. Nếu có nhái, ăn theo, thì hãy làm cho nó mới hơn, hay hơn thì hãy làm. Còn không thì tự suy nghĩ và sáng tạo ra 1 game của riêng mình ấy, dù có dở cũng không ai chửi bạn. Chứ đã nhái lại mà còn dở thì..... ăn GẠCH nhá.

Chúng ta bắt đầu bài học thôi.

Để chuẩn bị cho bài học, các bạn cần ôn lại 1 chút kiến thức C++ về mảng 1-2 chiều, con trỏ cấp 1 (*pointer) và con trỏ cấp 2(**pointer), Mối quan hệ giữa con trỏ và mảng nhé, khá quan trọng đó

Trong bài này, chúng ta cần làm các công việc sau đây:

+ Xây dựng Class Sushi, => tạo ra các miếng sushi ở vị trí hàng cột ( thuộc ma trận )
+ Xây dựng màn chơi bằng cách tạo 1 ma trận ( mảng 2 chiều ) chứa các Sushi.
+ Tạo và làm rơi Sushi xuống khi khởi đầu màn chơi

Nhiệm vụ chỉ có vậy thôi. Chúng ta Go nhé

>cocos new sushi -p com.vn.sushi -l cpp -d f:android/project

B1 - Xây dựng Class Sushi

Mở Class của Project Sushi vừa tạo, mở file AppDelegate.cpp sửa và thêm 1 số lệnh sau

+ Phần include thay HelloWorldScene.h = PlayLayer.h, đơn giản chỉ là ko dùng tên HelloWorld nữa, nghe Amatuer làm sao
+ Thêm đoạn code sau vào trước lệnh director->setDisplayStats(true);

   // Thiết lập độ phân giải
   glview->setDesignResolutionSize(320, 480, ResolutionPolicy::FIXED_WIDTH);

   // Thiết lập đường dẫn tới thư mục w640 trong Resource khi biên dịch
    std::vector<std::string> searchPath;
    searchPath.push_back("w640");
    CCFileUtils::getInstance()->setSearchPaths(searchPath);
    director->setContentScaleFactor(640 / 320);

+ Sửa lệnh  auto scene = HelloWorldScene::createScene(); thành auto scene = PlayLayer::createScene();

Bạn xóa 2 file HelloWorldScene.h và .cpp đi nhé vì bài này chúng ta ko dùng đến nữa, mà tạo hẳn file mới và các lớp mới.

+ Bạn tạo 4 file sau ( file rỗng)
- PlayLayer.h, .cpp
- SushiSprite.h, .cpp

+ Đồng thời mở file sushi.vcxproj ( trong thư mục proj.win32) và add vào 4 file trên nhé. Cách add bạn search HelloWorldScene là biết cách. ( Và phải xóa HelloWorldScene ở trong này luôn nhé ).

Dựng Class Sushi

Mở file SushiSprite.h, chèn vào đoạn lệnh sau

#ifndef __SushiSprite_H__
#define __SushiSprite_H__

#include "cocos2d.h"

USING_NS_CC;

class SushiSprite:public Sprite // Kế thừa từ lớp Sprite nhé

{
public:

static SushiSprite* create(int row, int col); // Tạo 1 Sushi tại vị trí hàng, cột thuộc Ma trận
static float getContentWidth(); // Lấy chiều rộng của sprite sushi, cần thiết cho việc tính toán về sau
CC_SYNTHESIZE(int,m_row,Row); // Vị trí hàng của Sushi trong Ma trận
CC_SYNTHESIZE(int,m_col,Col);  // Vị trí hàng của Sushi trong Ma trận
CC_SYNTHESIZE(int,m_imgIndex,ImgIndex); // Loại Sushi
};

#endif

CC_SYNTHESIZE thì ở các bài trước mình đã giải thích rồi nhé, ko quá khó để hiểu đâu. Hãy dùng ô Search của Blog và search "CC_SYNTHESIZE_READONLY" nhé ra ngay bài 12

File Sushi.cpp, thêm vào 

#include "SushiSprite.h"

USING_NS_CC;

#define TOTAL_SUSHI 6 // Tổng số loại Sushi

// Tạo 1 mảng con trỏ, mỗi con trỏ trỏ tới 1 chuỗi, sushiNormal[i] lưu địa chỉ chuỗi i
static const char *sushiNormal[TOTAL_SUSHI] = {
"sushi_1n.png",
"sushi_2n.png",
"sushi_3n.png",
"sushi_4n.png",
"sushi_5n.png",
 "sushi_6n.png"
};

// Lấy chiều rộng của đối tượng 
float SushiSprite::getContentWidth()
{
    static float itemWidth = 0;
    if (itemWidth==0) {

// Tạo ra 1 sushi từ mảng trên
        auto sprite = Sprite::createWithSpriteFrameName(sushiNormal[0]);
        itemWidth = sprite->getContentSize().width;
    }
    return itemWidth;
}

// Tạo mới 1 Sushi có vị trí row, col, trả về 1 con trỏ kiếu SushiSprite*
SushiSprite *SushiSprite::create(int row, int col)
{
// Tạo mới
SushiSprite *sushi = new SushiSprite();
// Gắn hàng, cột, index
sushi->m_row = row;
sushi->m_col = col;
sushi->m_imgIndex =  rand() % TOTAL_SUSHI; // random loại Sushi từ 0-5 (= index của mảng)
// Tạo hình ảnh từ chuỗi của mảng trên
sushi->initWithSpriteFrameName(sushiNormal[sushi->m_imgIndex]);
sushi->autorelease(); // Tự động hủy khi cần
return sushi;
}

B2 - Xây dựng Màn chơi, tạo hiệu ứng rơi Sushi

Ở bước trên chúng ta đã xây dựng xong Class Sushi, vậy làm thế nào để tạo ra màn chơi với 1 ma trận hàng +cột chứa sushi đây?. Các bạn theo dõi bên dưới nhé

+ Mở file PlayLayer.h ( đang trống) Code file như sau

#ifndef __PlayLayer_H__
#define __PlayLayer_H__

#include "cocos2d.h"

USING_NS_CC;

class SushiSprite; // Chỗ này bạn có thể cho lên #include

class PlayLayer : public Layer
{
public:

    PlayLayer();
    ~PlayLayer();
    static Scene* createScene(); // Tạo màn chơi
    CREATE_FUNC(PlayLayer);
    // Khởi tạo
    virtual bool init() override;
private:

    // Sprite Sheet để lưu các loạt ảnh tạo animation, học ở bài 19
    SpriteBatchNode *spriteSheet;

    // Ma trận 2 chiều dùng con trỏ cấp 2 để lưu SushiSprite* ( Hãy đọc lại phần con trỏ và mảng 2 chiều) 
    SushiSprite **m_matrix;

    // Kích thước Ma trận, hàng, cột
    int m_width;
    int m_height;

    // Vị trí căn chỉnh trên màn hình ( Tọa độ Left Bottom)
    float m_matrixLeftBottomX;
    float m_matrixLeftBottomY;
    
    // Hàm tạo ma trận
    void initMatrix();

    // Tạo Sushi và cho rơi xuống ở vị trí hàng cột bất kỳ
    void createAndDropSushi(int row, int col);

    // Trả lại vị trí tọa độ Point của Sushi tại vị trí hàng + cột trong ma trận
    Point positionOfItem(int row, int col);
};

#endif /* defined(__PlayLayer_H__) */

+ Mở file PlayLayer.cpp để xây dựng các hàm, Code file như sau ( Thực sự là hơi dài nếu tính cả Comment của mình ). Cũng đành copy vậy

#include "PlayLayer.h"
#include "SushiSprite.h"

// Định nghĩa kích thước ma trận 6x8
#define MATRIX_WIDTH (6)
#define MATRIX_HEIGHT (8)

// Khoảng cách giữa cách ảnh Sushi = 1
#define SUSHI_GAP (1)

// Hàm tạo Contructor, tất cả con trỏ = NULL, giá trị =0

PlayLayer::PlayLayer()
: spriteSheet(NULL) //chỗ này là dấu 2 chấm, đằng sau dấu phẩy hết nha
, m_matrix(NULL)
, m_width(0)
, m_height(0)
, m_matrixLeftBottomX(0)
, m_matrixLeftBottomY(0)
{
}

// Hàm hủy thì giải phóng con trỏ

PlayLayer::~PlayLayer()
{
    if (m_matrix) {
        free(m_matrix);
    }
}

// Hàm tạo Scene, đơn giản quá

Scene *PlayLayer::createScene()
{
    auto scene = Scene::create();
    auto layer = PlayLayer::create();
    scene->addChild(layer);
    return scene;
}


// Hàm khởi tạo init()
bool PlayLayer::init()
{
    if (!Layer::init()) {
        return false;
    }
 
    //Tạo ảnh nền
    Size winSize = Director::getInstance()->getWinSize();
    auto background = Sprite::create("background.png");

    // Điểm neo, điểm này sẽ ảnh hưởng tới việc đặt setPosition của sprite, nếu ko đặt điểm neo thì khi setPosition sẽ mặc định lấy điểm trung tâm của Sprite đặt lên màn hình 
    background->setAnchorPoint(Point(0, 1));
    background->setPosition(Point(0, winSize.height)); // Điểm neo như trên dễ đặt Position hơn nhỉ
    this->addChild(background);

 
    // Khởi tạo bộ đệm Sprite Frame
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("sushi.plist");
    spriteSheet = SpriteBatchNode::create("sushi.pvr.ccz"); // Chú ý hàm này, "pvr.ccz" tập tin đã nén và hõa hóa = TexturePacker, chứa hình ảnh, bạn có thể xem chúng bằng phần mềm TexturePacker, tool PVR View

    addChild(spriteSheet); // Thêm SpriteSheet vào Layer
 
// Kích thước ma trận, 
    m_width = MATRIX_WIDTH; // =6
    m_height = MATRIX_HEIGHT; //=8
 
    // Đặt vị trí ma trận, tính toán 1 chút là ra ấy mà, lấy tổng kích thước màn hình, trừ đi các khoảng cách sẽ ra 2 khoảng bên trái và phải của Ma trận

    m_matrixLeftBottomX = (winSize.width - SushiSprite::getContentWidth() * m_width - (m_width - 1) * SUSHI_GAP) / 2;
    m_matrixLeftBottomY = (winSize.height - SushiSprite::getContentWidth() * m_height - (m_height - 1) * SUSHI_GAP) / 2;
 
 // Khởi tạo 1 mảng

// Kích thước bộ nhớ arraySize = sizeof (kiểu) x kích thước mảng

    int arraySize = sizeof(SushiSprite *) * m_width * m_height;

// Cấp phát bộ nhớ bằng hàm malloc, ( xem lại cách sử dụng hàm này ), ép kiểu về kiểu của biến SushiSprite **, rồi cấp phát với kích thước arraySize 
    m_matrix = (SushiSprite **)malloc(arraySize);
    memset((void*)m_matrix, 0, arraySize); // Đặt tất cả giá trị của mảng là 0, bắt buộc ép kiểu void* của mọi loại mảng
 
    initMatrix(); // Khởi tạo ma trận Sushi
    return true;
}

void PlayLayer::initMatrix()
{

// Duyệt các phần tử ma trận 2 chiều
    for (int row = 0; row < m_height; row++) {
for (int col = 0; col < m_width; col++) {
            createAndDropSushi(row, col); // Tạo và làm rơi Sushi xuống vị trí hàng + cột
        }
    }
}

void PlayLayer::createAndDropSushi(int row, int col)
{
    Size size = Director::getInstance()->getWinSize();
 
    SushiSprite *sushi = SushiSprite::create(row, col); // Gọi đến hàm tạo ra Sushi của lớp SushiSprite
 
    // Tạo animation, or Action?
    Point endPosition = positionOfItem(row, col); // Lấy tọa độ Point từ row, col truyền vào
    Point startPosition = Point(endPosition.x, endPosition.y + size.height / 2); // (y) Điểm đầu = Điểm Cuối + 1 khoảng nửa màn hình
    sushi->setPosition(startPosition);

    float speed = startPosition.y / (2 * size.height); // tốc độ

    sushi->runAction(MoveTo::create(speed, endPosition)); // Di chuyển rơi xuống

    // Thêm vào Spritesheet
    spriteSheet->addChild(sushi);


// Thêm sushi vào mảng, chỗ này là cách quy mảng 2 chiều về mảng 1 chiều nhé, a[i][j] = a[i*COL + j]

    m_matrix[row * m_width + col] = sushi;
}

// Tọa độ Point từ vị trí row, col
Point PlayLayer::positionOfItem(int row, int col)
{
    float x = m_matrixLeftBottomX + (SushiSprite::getContentWidth() + SUSHI_GAP) * col + SushiSprite::getContentWidth() / 2;
    float y = m_matrixLeftBottomY + (SushiSprite::getContentWidth() + SUSHI_GAP) * row + SushiSprite::getContentWidth() / 2;
    return Point(x, y);
}

Xong phần Code, hãy build và chạy thử xem thế nào?



Ngon rồi

Tổng kết lại ở bài này chúng ta học được :
+ Tạo Class mới ( Sushi ) đơn giản bằng C++
+ Ôn lại kiến thức về mảng, ma trận cấp 2, con trỏ đơn, con trỏ 2 cấp
+ Tạo ma trận Sushi
+ Tính toán 1 chút về cách đặt ma trận trên màn hình
+ Tạo Action rơi các sushi xuống ở màn chơi

* Lưu ý 1 chút:

1/ Bạn thấy rằng hình như các sushu + background có vẻ tràn ra màn hình, kích thước không được hợp lý lắm. Thì phải thôi, nguyên nhân khiến bị như thế này là

+ Trong file AppDelegate.cpp, ta chỉ setting chỉnh kích thước trên mobile thôi, chứ ko phải cho window

Các bạn thử chạy trên máy thật hoặc máy ảo xem như nào. ĐT mình mới chêt nguồn rồi. và máy ảo thì nặng quá, và thường là chạy không đúng, hay force stop.

2/ Có vẻ hàm rand() không hiệu quả ( trên win) thì phải, chạy đi chạy lại, thì loại Sushi vẫn thế. Không biết trên máy ĐT thế nào?

Mình kết thúc bài này ở đây nhé.

Download:

+ Class
+ Resource
+ Texture, mở bằng TexturePacker ( hướng dẫn )

Chào và hẹn gặp lại các bạn trong những bài sau

Bài 21: Học làm game thứ 3: Sushi Crush - Like Candy Crush or Bejewer ( Part 2 )

More about

Tối ưu hóa bài viết với Seo Doctor

Người đăng: chisenhungsuutam

Seo Doctor là một công cụ có sẵn trong trình duyệt firefox để kiểm tra xem bài viết của bạn đã đạt được chuẩn seo của google hay chưa. Nếu bạn là người mới tham gia viết blog để seo các từ khóa quan trọng thì đây là một công cụ rất quan trọng và hữu ích. 

Các bước cài đặt Seo Doctor trên firefox 
- Vào Firefox => Công cụ => Tiện ích => Gõ vào ô tìm kiếm từ khóa Seo Doctor
- Cài đặt add on 
- Sau khi cài đặt xong sẽ có biểu tượng hình lá cờ trên thành công cụ tìm kiếm
cài đặt seo doctor
Cài đặt seo doctor
Màu sắc của hình lá cờ tùy thuộc vào số điểm bạn đạt được khi viết bài. Số điểm tối đã cho một bài viết là 100 điểm. 
- Khi lá cờ màu xanh cho biết bài viết đó đã đạt chuẩn seo
- Khi màu vàng có nghĩa bài viết đang có những cảnh báo cần chỉnh sửa nhưng chưa cấp thiết
- Khi lá cờ màu đó thì bài viết đang có vấn đề và phải chỉnh ngay
Sau khi viết bài, bạn view bài viết trong blog và click vào biểu tượng lá cờ để xem các thông số của bài viết
các thông số seo doctor
Các thông số của seo doctor

Ý nghĩa các thông số của Seo Doctor

Page rank flow
Nó cho bạn biết rằng các liên kết trong bài viết của bạn đi đến các bài viết khác trên blog của bạn hay đi tới các blog khác. Chỉ số này có giá trị từ 0 - 100%. Khi 100% nghĩa là toàn bộ link sẽ ở trên trang của bạn, 0% nghĩa là toàn bộ link sẽ dẫn tới trang khác. 
Tốt nhất là bạn nên duy trì chỉ số này ở trên mức 50% - Có nghĩa là phải có các link ẩn sang các bài đăng khác trong cùng blog nhiều hơn link dẫn sang blog khác. 
Alt image tag
Cho biết các hình ảnh trong bài viết của bạn đã đặt thẻ alt hay chưa? Thẻ alt rất quan trọng trong việc seo hình ảnh, vì vậy đừng quên nó nhé. 
Web Analytics
Thông báo rằng bạn đã cài đặt công cụ phân tích website chưa? Việc cài đặt công cụ này hoàn toàn miễn phí nhưng cũng chỉ được dùng thử một thời gian. Nếu bạn muốn dùng tiếp thì phải bỏ tiền ra mua. 
Bạn có thể đăng ký web analytics qua đường link để dùng thử: http://www.google.com/analytics
H1, H2 tag
H1 là thẻ tiêu đề mà google sẽ để ý tới đầu tiên, nó thường nằm trong tiêu đề bài viết. Vì vậy, hãy đặt từ khóa chính của bài viết trong tiêu đề. 
Tiếp đến là H2 là thẻ quan trọng thứ 2 trong bài viết. Bạn sắp xếp các từ khóa quan trọng thứ 2 này hợp lý trên bài viết. 
Number of links
Số link liên kết trên bài viết của bạn. Nó sẽ thông báo đỏ khi số link liên kết quá lớn
Loading time
Thời gian để load các liên kết của bạn. Thời gian càng nhỏ thì sẽ càng được ưu tiên. Vì vậy hãy liên kết tới những trang có tốc độ tải tốt nhé. 
Meta Description
Cho biết bạn đã mô tả những thông tin chính của trang chưa? Công cụ này có sẵn trong blogspot, bạn chỉ cần bật lên và mô tả một vài nét chính trong bài viết là được.
Page Indexable
Yếu tố này phụ thuộc vào bài viết của bạn đã được index hay chưa. Để làm việc này thì bạn phải gắn blog vào webmaster và thêm site map cho tất cả các bài viết. 
Bạn có thể xem việc cài đặt chi tiết tại đây: Seo Blogspot (Phần 5): Quản trị Blogspot bằng Webmaster tool
SEO Friendly urls
Seo Doctor báo rằng đường link bài viết của bạn đã thân thiện hay chưa. Bạn chỉnh cho đường link bài viết trong blogspot thân thiện hơn bằng cách vào link => Permalink => Chỉnh cho ngắn hơn và chứa từ khóa chính
Title tag
Thẻ tiêu đề trong bài viết. Phải khẳng định rằng tiêu đề bài viết của bạn là độc nhất và có chứa từ khóa chính. 
Inbound links

Seo Doctor sẽ sử dụng yahoo API để lấy những backlink trên blog của bạn. Bạn phải đăng ký yahoo API và nhập những thông số để được yahoo index những bài viết trên blog nhé. 

seo doctor
Seo Doctor
More about

Bão "câu like facebook" ngày càng mạnh

Người đăng: chisenhungsuutam on Thứ Năm, 29 tháng 5, 2014

Khi nhu cầu bán hàng, mong muốn nổi tiếng của mọi người càng tăng thì việc câu like facebook đã trở thành một cơn bão tràn ngập thị trường internet dưới rất nhiều hình thức khác nhau. Hôm nay mình sẽ chia sẻ về một số hình thức câu like facebook và đưa ra những lời khuyên nhỏ về việc này. 

Một số hình thức câu like facebook đang sử dụng: 

+ Dùng app và gắn cho nó những hình ảnh sốc, sexy, tin dữ, bói toán để thu hút người xem click vào. Mỗi lần họ click là like luôn một fanpage nào đó mà không biết là mình đã like. Có thể nói đây là một hình thức lừa đảo. 
+ Lập trang cá nhân, fanpage rồi đưa toàn các em xinh đẹp lên đó để mọi người thì nhau bình luận, chia sẻ. Rồi một ngày đẹp trời trang cá nhân đó, fanpage đó đăng tin bán hàng như thật. Kiểu này thì ai dám mua hàng. 
+ Dùng một đoạn code gắn vào website, mỗi khi có khách truy cập vào website thì cũng tự động like luôn một fanpage nào đó mà không biết. 
+ Vào các trang trao đổi like như: abclike.com, muabanlike.vn,... để like và được like.
,....Và một số hình thức câu like facebook chưa kể hết. 

Có nên sử dụng hình thức câu like facebook không?

Một số công ty hiện nay còn thuê người câu like để quảng bá thông tin và bán hàng. Điều này là không nên chút nào. 
Bạn nên hiểu bản chất thực sự của facebook là để chia sẻ thông tin chứ không phải là nơi để bạn rao bán hàng. Nếu sản phẩm của bạn thực sự tốt thì khách hàng sẽ tự động chia sẻ những cảm nhận trên tường của bạn hoặc họ sẽ tự động like fanpage của bạn để cập nhật những thông tin mới nhất về sản phẩm. 
Những con số like thông qua việc câu like facebook sẽ không mang lại hiệu quả như bạn mong muốn và sẽ làm bạn bị phân tâm, mất thời gian vào những khách hàng không tiềm năng (Do bỏ thời gian ra để nói chuyện không liên quan). 
Hãy có một kế hoạch cụ thể cho việc quảng cáo trên facebook thông qua việc mua quảng cáo của facebook. Như vậy bạn sẽ hướng sản phẩm tới những khách hàng tiềm năng thực sự và không phải mất nhiều thời gian. 
Facebook thực sự là một mạng xã hội lớn nhưng nó cũng chỉ là công cụ cho ta mà thôi. Đừng cố lạm dụng nó quá để rồi có tác dụng phản lại. Hãy tập trung vào sản phẩm chất lượng, dịch vụ tốt thì khách hàng sẽ tìm đến bạn chứ không cần phải câu like facebook đâu nhé. 
câu like facebook
câu like facebook
More about

Chiến thắng đối thủ bằng email marketing thân thiện

Người đăng: chisenhungsuutam

Hiện có rất nhiều chiến dịch email marketing được tung ra hàng ngày, hàng giờ để chiếm lĩnh thi trường. Các nhà marketing luôn tìm đủ mọi cách để giảm giá sản phẩm, dùng mọi tiêu đề sốc để thu hút khách hàng mở thư và mua hàng. Tất nhiên là sẽ có những phần trăm nhỏ trong đó mở thư nhưng số lượng người mua hàng thì sẽ không nhiều như mọi người hay quảng cáo trên mạng là có thể tăng doanh thu ầm ầm nhờ email marketing. Vì số lượng email chỉ có hạn mà bạn và các đối thủ đều tiếp cận, ai cũng hạ giá thì họ biết chọn ai. 

Hôm nay mình sẽ giới thiệu về phương pháp dùng email marketing để chăm sóc khách hàng chứ không bán hàng.

1. Tặng quà thành viên 

Bản thân mình sẽ rất vui khi nhận được thông tin "Quà tặng chỉ dành riêng cho thành viên". Cho dù đôi khi đó chỉ là những món quà nhỏ nhưng mình sẽ vô cùng hào hứng đến nhận quà. Kiểu gì mình cũng sẽ khoe với bạn bè về dịch vụ của công ty đó và khuyên họ nên dùng sản phẩm của công ty đó. Vậy để thấy rằng với một email marketing không hề mang tính chất bán hàng mà vẫn có tác dụng bán hàng nhé. 

2. Hỏi thăm đúng thời điểm

Nếu vào ngày sinh nhật của bạn mà nhận được tin sẽ được một lời chúc mừng thân mật và có phiếu giảm giá thì sao nhỉ?  Bạn sẽ cảm thấy mình là một khách hàng đặc biệt của công ty đó phải không? Khi đó thì làm sao có đối thủ nào có thể cạnh tranh với bạn được, cho dù đối thủ có giảm giá hơn nữa. 
Để làm được điều này thì bạn phải thu thập được thông tin đầy đủ của khách hàng và quản lý nó một cách khoa học. Bạn đừng cố gắng tìm kiếm khách hàng mới thông qua những chiến dịch hoành tráng thông qua email marketing vì nó sẽ không mang lại hiệu quả bằng việc bạn chăm sóc chính những khách hàng đang có. 
Việc gửi thư bạn nên chọn khoảng thời gian phù hợp để gửi, có thể theo tuần và giờ phù hợp, chứ không phải ngày nào cũng spam, bạn sẽ tạo ra tác dụng ngược lại đó. 

3. Khuyên dùng phần mềm chất lượng

Có vô số phần mềm email marketing quảng cáo trên mạng là miễn phí nhưng khuyên bạn không nên dùng. Hãy chọn mua một một phần mềm chất lượng để dùng. Nó sẽ giúp bạn tự động trong việc gửi thư chất lượng, phân tích chính xác những phản hồi của khách hàng. 
email marketing
email marketing

Để cạnh tranh với những đối thủ ngày càng nhiều như hiện nay thì bạn cần phải có sự khác biệt. Hy vọng những thủ thuật nhỏ về email marketing này sẽ giúp bạn giữ được khách hàng đang có và thu hút được khách hàng mới thông qua khách hàng cũ.

More about

Chặng đường gian nan của những chiến binh seo

Người đăng: chisenhungsuutam on Thứ Tư, 28 tháng 5, 2014

Mức độ cạnh tranh độ khó của các từ khóa ngày càng tăng do sự xuất hiện của nhiều người cùng tham gia vào thị trường internet để marketing và bán hàng. Vì vậy, để trở thành hoặc giữ vững ngôi vị của một chiến binh seo thì bạn phải nắm vững những nguyên tắc cơ bản sau:

1. Cập nhật thường xuyên tin tức mới về seo

Google thường xuyên thay đổi những thuật toán trong seo để thắt chặt các quy tắc và tránh việc spam của các thành viên không có ý định hợp tác với google. Việc thay đổi các thuật toán như vậy làm cho vị trí các từ khóa của bạn có thể thay đổi theo chiều hướng tích cực hơn hoặc có thể sẽ xấu đi (tụt hạng). Là một chiến binh seo thì bạn sẽ luôn cập nhật tốt nhất những tin tức đó để có những giải pháp điều chỉnh cho phù hợp với google.

2. Giữ vững ngôi vị

Việc giữ vừng ngôi vị sẽ giúp cho bạn giữ được những khách hàng đang sử dụng sản phẩm và thu hút thêm những khách hàng mới. Nếu bạn đang có một vị trí tốt trên trang nhất thì hãy luôn có những giải pháp để giữ nó nhé. Với những bạn mới vào nghề thì hãy từng bước học hỏi, chiếm lĩnh những vị trí thấp hơn một chút, rồi một ngày chúng ta sẽ trở thành những chiến binh seo để chiến đấu với đàn anh, đàn chị. 

3. Đánh bại đối thủ cạnh tranh

Đây mới thực sự là nghề của những chiến binh seo. Luôn phải có những chiến lược mới, công cụ mới hơn, tốt hơn để cạnh tranh với những đối thủ ngày càng nhiều trên thị trường internet. 
Hãy dùng công google alert để theo dõi mọi đối thủ bằng việc cài đặt những từ khóa mà bạn đang nắm giữ. Mỗi khi xuất hiện những bài viết mới có từ khóa trùng với từ khóa của bạn thì nó sẽ thông báo cho bạn qua email và bạn sẽ có những biện pháp đối phó kịp thời. 
Chúc cho những chiến binh seo ngày càng có thêm nhiều thành công hơn trong năm 2014.
chiến binh seo
Chiến binh seo
More about

Lưu ý khi sử dụng phiên bản Cocos2d-x 3.1

Người đăng: chisenhungsuutam

Hi!

Ở các bài trước, mình đã báo 1 tin vui với các bạn là đã có phiên bản cập nhật mới nhất của Cocos2d-x 3.1 với một số điểm mới. Mình cũng háo hức down về trải nghiệm, nhưng khi build những Project cũ thì báo lỗi. : ((. Chả hiểu sao vì các bản 3.0 ( RC0, RC1 ) chỉ việc down về và chiến thôi.

Sau khi mình thử tạo mới 1 project, build lại thì thấy chạy ngon lành, ẹc. => Rút ra 1 EXP

+ Với Project của phiên bản cũ tạo ra ( trường hợp này 3.0 ) thì chỉ dữ lại Class + Resource.
+ Dùng bản 3.1 tạo new Project, rồi đập Class + Resource vào, rồi build là chắc ăn nhất, không lỗi trừ khí Engine nó lên hẳn bản v4, v5 thì cần xét lại code



Đây là 1 bài nhỏ thôi, để mọi người lưu ý khi xài bản 3.1 thôi chứ không phải câu VIEW

Hẹn gặp lại các bạn ở các bài sau hay ho, hấp dẫn hơn.

Thanks!
More about

Cách xài chùa phầm mềm TexturePacker 3.3.4 vĩnh viễn

Người đăng: chisenhungsuutam

Hi all!

Lâu lâu không viết bài, cũng thấy ngứa ngáy tay chân. Cơ mà tại sếp dạo này chăm chỉ ở nhà, cứ dí việc vào đầu, thành thử không rảnh để nghiên cứu tiếp. Tuy nhiên hôm nay mình sẽ tranh thủ hướng dẫn cho mọi người cách làm 1 thứ rất hay ho.

Hẳn các bạn đã biết, trong Làm game thì ngoài ý tưởng, code nguồn, còn 1 thành phần rất quan trọng khác đó là HÌNH ẢNH, âm thanh. Game bạn có thể không cần âm thanh, nhưng Hình ảnh thì chắc hẳn không thể thiếu.

Mình xin giới thiệu với mọi người 1 phần mềm quản lý file Hình ảnh rất tuyệt vời đó là TexturePacker - http://www.codeandweb.com/texturepacker

Một số tính năng chính của nó:

+ Tạo và quản lý các Sprite Sheet
+ Nén hình ảnh, tối ưu hóa cho chương trình
+ Hỗ trợ nhiều nền tảng Engine nổi tiếng 2D và 3D
+ Hỗ trợ nhiều định dạng: PNG, PSD, SWF, v..v..
+ Publish ra nhiều định dạng phù hợp với các loại Engine ( Plist, pvr, ccz ,....)

Quá tuyệt vời phải không, và giá nó cũng không quá cao ~800k VNĐ thôi. :))




Tất nhiên mình giới thiệu phần mềm này không phải để các bạn mua nó của mình, vì mình có bán đâu. Mà là vì theo truyền thống của người Việt Nam chúng ta vẫn thích dùng đồ chùa hơn. Nên sau đây mình sẽ hướng dẫn các bạn cách đề xài chùa phần mềm rất ngon này.

Các bạn download bản mới nhất ( 3.3.4) tại trang chủ theo Link ở trên. Cài đặt như bình thường thôi, Click and Next là xong.

Bạn bật phần mềm lên, có 2 trường hợp xảy ra

1/ Bạn cài lần đầu

Nó sẽ tự động lựa chọn cho bạn chế độ Trial Pro 6 ngày ( dùng thử bản Pro trong 6 ngày ). Chế độ này bạn được full chức năng, không bị hạn chế bất cứ điều gì. Rất ngon, nhưng chỉ 6 ngày thôi ( hix ) .

2/ Bạn đã cài đặt và dùng hết 6 ngày, bật lên chỉ hiện ra lựa chọn sau














Bạn chỉ được chọn Lite version, với nhiều hạn chế ví dụ, hình ảnh sẽ bị đóng dấu, giới hạn định dạng file,v..v...

(Bản Lite bị giới hạn - rất giống bản Pro nhưng có dòng chữ phái dưới bên phải, chức năng bị giới hạn)



Vậy làm thế nào để được xài chùa mãi mãi đây? Bạn chỉ cần làm theo các bước sau đây:

B1: Bạn mở Registry Editor lên ( Run> gõ vào regedit)
B2: Tìm tới khóa sau :

HKEY_CURRENT_USER\Software\code-and-web.de\TexturePacker\licensing\data




Chú ý vào 2 dòng mình đánh dấu đỏ ( bên phải )
+ expiryDate : là ngày hết hạn, như mình đã cài, và bị hết hạn vào ngày 04-05, Click đúp vào đó và sửa thành 2999-04-05 chẳng hạn. Thế là xong, never hết hạn

+ licenseType: Essential, nghĩa là bạn đang dùng bản Lite, hãy Click vào và sửa thành trial 

Để chắc ăn, bạn có thể thực hiện thêm Bước 3

B3: Chỉnh trong Registry khóa sau về false


Xong rồi đó 

Chúng ta sẽ được dùng trial phiên bản Pro vĩnh viễn nhé

(Hãy chú ý thời hạn trial của phần mềm qua ảnh bên dưới )



những 359711 ngày ~ 100 năm ( Chỉnh 1000 năm cũng được )

Thử Test nào, xem có bị gì không, Oh NOOOOOOOOOO!!!!!!!!

(Đã bị đóng dấu "kiểm dịch")

Nhưng các bạn đừng lo, mình đã tìm ra được 1 cách khắc phục bệnh này. Lúc đầu cũng loay hoay, rầu lòng phết, xong cuối cùng cách của mình cũng khá đơn giản. 

Bạn chú ý ở hình dưới này, cái expiryDate là ngày 2014-04-05, đến thời điểm này 28/5, đã bị hết hạn. Phần mềm nó lưu lại ở đâu đó ( chịu ko tìm ra ). Do đó nó sẽ vẫn đóng dấu "kiểm dịch" khi ta Publish, mặc dù thời gian Trial là 100 năm ( khi chỉnh ở trên )


Mình sẽ bày với các bạn 1 cách đơn giản đó là, CHỈNH THỜI GIAN CỦA HỆ THỐNG về trước thời điểm hết hạn này là xong, ( Bạn tích vào đồng hồ trên Startbar Window ấy, chọn dòng rồi Change date and time settings, rồi chỉnh thôi) ví dụ mình chỉnh giờ hệ thống về thời điểm 2013-04-05 , lùi hẳn 1 năm đi cho ăn chắc. Và đây là kết quả sau khi chỉnh thời gian. ( Nhớ là khi chỉnh time xong, bạn phải tắt phần mềm TexturePacker đang chạy rồi chạy lại nhé, mới có hiệu quả )


Giờ thì dùng thoải mái rồi, không bị đóng dấu, ko bị giới hạn tính năng, không giới hạn thời gian. Mình test được mấy ngày mà chưa bị vấn đề gì. Mọi người cùng Test nhé.

Việc chỉnh thời gian có thể khiến 1 số phần mềm gặp lỗi khi chạy đó, các bạn chú ý nhé. Tuy có hơi phiền 1 chút khi chỉnh thời gian nhưng giá trị mang lại khá lớn nhỉ, 800K, hehe. Khi nào làm game có tiền Donate sau cũng được. Chúc các bạn thành công.

Bên lề 1 chút: 

+ Bộ TexturePacker + Physics Editor của CodeAndWeb thực sự là 1 bộ đôi hoàn hảo để làm game 2D, thậm chí 3D, nhưng tiếc là Physics Editor chưa có bản C.Rack nào trên mạng hết.
+ Bạn nào có quen cao nhân Hack, nhờ Crack giúm nhé, nếu không có thể mua chỉ với 448K/năm, hỗ trợ thanh toán bằng tiền Việt tại đây http://sites.fastspring.com/codeandweb/product/all

Ngoài ra các bạn có thể tìm hiểu phần mềm tạo Sprite Sheet khác là ShoeBox, cũng rất hay, có thêm cả mấy chức năng tách ảnh từ Sprite Sheet, các bạn hãy tìm hiểu thêm.

Về phần mềm Physics, mình giới thiệu 1 số phần mềm sau

+ R.U.B.E ( có lẽ là hay nhất ) 30$ mua bằng Paypal
+ Physics Editor ( hay thứ nhì ) 448K
+ Physics Body Editor ( open Source )
+ TS4 ( free, online ) http://ts4.us/tools/box2deditor.html

Các bạn lựa chọn nhé.

ĐÃ CÓ BẢN PATCH cho TP 3.5.3 + PE 1.0.9

Cảm ơn bạn vn kakalat đã cung cấp bản Patch tốt nhé

TexturePacker 3.5.3 nhé, DOWNLOAD tại đây ( Down về quẳng vào thư mục cài đặt ) - Chú ý là win 64 hay win 32 đều dùng bản cài TexturePacker 3.5.3 cho win32 nhé

Physics Editor 1.09, tại đây ( Down về sửa tên lại thành PhysicsEditor rồi quẳng vào thư mục cài đặt là xong )

Trọn bộ Phần mềm TP 3.5.3 + PE 1.0.9 và Patch tại đây



Hẹn gặp lại các bạn trong các bài học sau.
More about

Thủ thuật seo hình ảnh lên top cực nhanh

Người đăng: chisenhungsuutam

Hiện nay nhu cầu mọi người tìm kiếm hình ảnh rất lớn. Nếu hình ảnh của bạn ở những vị đầu và bắt mắt sẽ thu hút được người xem và khi đó bạn sẽ có được lượng view lớn hơn. Hôm nay, mình sẽ chia sẻ về thủ thuật seo hình ảnh cực đơn giản. 

1. Vẻ đẹp của ảnh

Ai cũng thích xem hình ảnh đẹp, nhất là những hình ảnh hấp dẫn của các cô gái (hj). Vì vậy, để có thể thu hút được người xem click vào hình ảnh của bạn thì hình ảnh đó phải có gì đó lạ hoặc thật hấp dẫn nhé. 
Yếu tố vẻ đẹp của ảnh không liên quan gì đến thủ thuật seo hình ảnh nhưng lại rất hiệu quả trong việc tăng traffic. 
Tuy nhiên, bạn nên nhớ rằng google có cơ chế đánh giá hình ảnh trùng lặp để biết bạn có đi copy hình ảnh hay không. Vì vậy, tốt nhất là bạn nên sử dụng ảnh bạn tự chụp hoặc có lấy về thì cũng phải chỉnh sửa gì đó mới up lên nhé. 

2. Đặt tên ảnh

Thông thường khi ta chụp ảnh về thì ảnh thường có ký tự như là IMG123, điều này không tốt cho seo chút nào. Tên ảnh nên đặt theo tiêu đề của bài viết là tốt nhất để hỗ trợ seo hình ảnh.
Cách thức đặt là: Tên ảnh không dấu và cách nhau bằng một dấu gạch ngang. 
Ví dụ: cach-kiem-tien-online, cach-kiem-tien-voi-youtube, cach-seo-hinh-anh,.....

3. Định dạng ảnh

Để google để ý đến bạn một cách nhanh nhất thì hình ảnh của bạn phải nhẹ. Do đó, hãy chọn ảnh có định dạng .ipg. 
Tất nhiên là hình ảnh dạng ipg sẽ không đẹp bằng các định dạng khác nhưng nó lại hỗ trợ seo hình ảnh cho bạn nên hãy chọn nó nhé. 

4. Thẻ alt và caption

Thẻ alt và caption này có khi bạn chèn hình ảnh vào blog. Khi bạn click trực tiếp vào ảnh nó sẽ cho phép bạn căn chỉnh ảnh, thêm thẻ alt và caption. 
Trong phần thẻ alt bạn nên chọn tên trùng với tên bài viết sẽ hỗ trợ seo hình ảnh tốt nhất. 
thủ thuật seo hình ảnh
Thủ thuật seo hình ảnh
More about

Bài 19: Sprite Sheet Animation trong Cocos2dx-3

Người đăng: chisenhungsuutam

Hi!

Các bài trước chúng ta đã học và làm quen với các Sprite và Action cơ bản. Nhưng các bạn thấy rằng hầu hết các sprite đó trông có vẻ rất đơn điệu, chúng không hề có sự "cử động" - (animation) nào mặc dù chúng vẫn có "hành động" (action). Các bạn cần phân biệt Animation và Action nhé. Animation có thể hiểu ngắn gọn là những cử động của cơ thể nhân vật. Còn Action là những hành động của nhận vật để làm công việc gì đó. Đôi khi 2 khái niệm này cũng khá nhập nhằng. Hix.

Animation trong Cocos2d-x-3 có 2 loại
+ Sprite Sheet Animation: Tạo cử động bằng 1 loạt Sprite ảnh nối tiếp nhau
+ Skeleton Animation: Tạo cử động dạng khung xương

Bài này mình sẽ giới thiệu với mọi người loại Animation thứ nhất: Sprite Sheet Animation. Nội dung bài gồm:

+ Pack ảnh (texture paker) là gì? vì sao lại cần dùng pack ảnh
+ Cách tạo ra 1 Pack ảnh .Plist, prv.ccz
+ Cách import pack ảnh vào game và tạo Animation

Mình bắt đầu luôn đây!

B1- Pack ảnh là gì? dùng để làm gì

Khái niệm: 1 Pack ảnh bao gồm nhiều ảnh đơn gép lại với nhau, và có đi kèm 1 file để lưu thông số của từng ảnh. Thậm chí chỉ gồm có 1 file ( ví dụ pvr )
Dùng để làm gì? Quản lý file ảnh sẽ đơn giản hơn cho 1 project. Thường để nhóm các ảnh của một Animation, hoặc nhóm nhiều ảnh của chương trình lại, tối ưu chương trình, Ngăn chặn việc ăn cắp hình ảnh, và nhiều tác dụng khác.
- SpriteSheet có lẽ là 1 trường hợp riêng của Pack ảnh, gồm những hình được sắp xếp liên tiếp, có thứ tự của 1 chuyển động nào đó.
- Và đôi khi cũng nhập nhăng 2 cái này luôn, gọi chung hết là Sprite Sheet ( cứ hiểu là 1 nhóm ảnh vậy ). Haizzz

* Lưu ý, những định nghĩa hay tác dụng của pack ảnh do mình tự suy diễn nhé. Cũng ko biết phải tìm ở đâu. :-)). Ai biết rõ hơn thì chỉ với.

B2 - Cách tạo ra 1 pack ảnh .Plist, hoặc .Pvr

Bạn sử dụng chương trình TexturePacker ( hỗ trợ tốt cho Cocos2d) để tạo Pack. Do mình ko có license nên Publish ra sẽ báo lỗi. Chán ghê, mua full 2 bản TexturePacker và Physics Editor mất 1,1 triệu VNĐ. Haizzz, chưa kiếm được tiền từ game, mới học làm game mà đã chuẩn bị rút ví rồi.

Ngoài ra có 1 chương trình khác là ShoeBox cũng tạo được TexturePack nhé, các bạn search là thấy, Cài Adobe Air để chạy được phần mềm

Thôi chúng ta đi vào phần chính, giả sử đã tạo được pack ảnh từ TexturePacker nhé. Có khá nhiều định dạng Pack, nhưng bài mình tìm được là dạng .PNG + .PLIST

(Đã tìm được cách dùng FREE 4EVER phần mềm TexturePacker nhé, tuyệt vời ông mặt trời, mình sẽ hướng dẫn ở bài sau) . Đang test 1 thời gian xem lỗi gì ko?

B3 - Import pack ảnh vào game, tạo Animation

- Tạo 1 project mới tên animation nhé, nhớ thêm USING_NS_CC; vào phần #include của file HelloWorldScene.h
- Copy file Resource từ đây vào thư mục Resource
- Bắt đầu nghiên cứu code

* Mở file HelloWorldScene.h, Thêm vào đoạn code sau

public:

    HelloWorld(); // Hàm tạo
    ~HelloWorld(); // Hàm hủy
    virtual void onEnter(); // Hàm chồng ( override, not husband)
    // Bắt sự kiện Touch
    bool onTouchBegan(Touch* touch, Event* event);
    void onTouchMoved(Touch* touch, Event* event);
    void onTouchEnded(Touch* touch, Event* event);
    // Dừng lại
    void bearMoveEnded();

private:
    Sprite *bear; // Sẽ chứa ảnh con Gấu
    Action *walkAction; // Bước đi
    Action *moveAction; // Di chuyển
    bool moving;

* Mở file HelloWorldScene.cpp, Bạn định nghĩa 2 hàm tạo và hàm hủy như sau

HelloWorld::HelloWorld()
{
    moving =false;
}

HelloWorld::~HelloWorld()
{
    if (walkAction)
    {
        walkAction->release(); // Giải phóng con trỏ
        walkAction = NULL;
    }
}

Trong hàm init() xóa hết chỉ trừ return true và đoạn này

    if ( !Layer::init() )
    {
        return false;
    }

// Xóa hết

return true;

Thêm đoạn code sau vào phần đã xóa ở trên

// Bước 1, Nạp file .plist vào bộ đệm SpriteFrameCache, tạo 1 sheet = SpriteBatchNode, spritesheet để nạp 1 loạt các ảnh nằm trong 1 pack nhiều ảnh

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("AnimBear.plist");
auto spriteSheet = SpriteBatchNode::create("AnimBear.png");
this->addChild(spriteSheet);

// Bước 2, Nạp frame từng frame từ bộ đệm SpriteFrameCache vào 1 Vector ( giống mảng)

Vector<SpriteFrame*> aniframe(15); // Khai báo 1 vector kiểu SpriteFrame, với size = 15

char str[50]={0}; // chuỗi trung gian để đọc tên ảnh trong pack

for(int i =1;i<9;i++) // Lặp để đọc 8 ảnh trong pak
{
sprintf(str,"bear%d.png",i); // Đọc vào chuỗi str tên file thứ i

// Tạo 1 khung, lấy ra từ bộ đệm SpriteFrameCache với tên = str
auto frame = SpriteFrameCache::getInstance()->getSpriteFrameByName(str);

aniframe.pushBack(frame); // Nhét vào vector

}

// Bước 3, Tạo Animation từ Vector SPriteFrame

// Tạo khung hình animation từ vector SpriteFrame
auto animation = Animation::createWithSpriteFrames(aniframe,0.1f);
// Tạo ảnh 1con gấu
bear = Sprite::createWithSpriteFrameName("bear1.png");
// Đặt vị trí giữa màn hình thôi
bear->setPosition(Point(visibleSize.width/2, visibleSize.height/2));

// Tạo Action Animate ( hoạt họa ) bằng cách gọi hàm create của lớp Animate, Hãy tưởng tượng thế này, bạn có 8 cái hình ảnh nằm trên 8 trang giấy, lật nhanh 8 trang => ảnh chuyển động của nhân vật. Cái hàm create của lớp Animate có tác dụng "lật trang"gần giống thế, sẽ duyệt qua các khung hình của animation tạo ra ở trên

walkAction = RepeatForever::create(Animate::create(animation));
walkAction->retain(); // Hàm này chưa hiểu ý lắm
spriteSheet->addChild(bear); // Thêm ảnh con gấu tạo ở trên vào spritesheet

+ Dựng hàm onEnter()

void HelloWorld::onEnter()
{
Layer::onEnter();  //  Phải gọi hàm onEnter của Layer, lớp cha của HelloWorld

// Đặt Listener khi vào game
auto touchListener = EventListenerTouchOneByOne::create();
touchListener->setSwallowTouches(true);

touchListener->onTouchBegan= CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
touchListener->onTouchMoved=CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
touchListener->onTouchEnded=CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener,this);


}
+ Xây dựng các hàm Touch

bool HelloWorld::onTouchBegan(Touch* touch, Event* event)
{
    return true;
}

void HelloWorld::onTouchMoved(Touch* touch, Event* event)
{
}

void HelloWorld::onTouchEnded(Touch* touch, Event* event)
{

// Lấy điểm Touch
auto touchPoint = touch->getLocation();
touchPoint = this->convertToNodeSpace(touchPoint);

//Vận tốc= 480px / 3 giây;
float bearVelocity = 480.0/3.0;

// Khoảng di chuyển
Point moveDifference = touchPoint - bear->getPosition();
float distanceToMove = moveDifference.getLength(); // Khoảng cách thực
float moveDuration = distanceToMove / bearVelocity; // Thời gian di chuyển

// Quay đầu tùy theo khoảng cách âm hay dương
if (moveDifference.x < 0)
{
bear->setFlippedX(false); // Quay đầu
}
else
{
bear->setFlippedX(true); // Quay đầu

bear->stopAction(walkAction);
bear->runAction(walkAction); // Thực hiện cái Animate cử động nhân vật
// Di chuyển tới điểm Touch, trong khi vẫn thực hiện Animate
moveAction = Sequence::create(MoveTo::create(moveDuration,touchPoint),
CallFuncN::create(CC_CALLBACK_0(HelloWorld::bearMoveEnded, this)),NULL);
bear->runAction(moveAction);
moving = true;

}

+ Hàm

void HelloWorld::bearMoveEnded()
{
bear->stopAction(walkAction); // Dừng việc bước đi
moving = false;
}

Build ra và run




Vậy là chúng ta đã kết thúc bài 19 khá dài, Trong bài này chúng ta đã biết cách
+ Tạo khung hình với Vector SpriteFrame
+ Tạo animation từ SpriteSheet

Download file nguồn

Sprite Sheet tạo ra Animation khá hay và đơn giản nhưng nó có một nhược điểm khá lớn đó là sẽ tốn bộ nhớ để load các ảnh spritesheet.

Và chắc sẽ có bạn thắc mắc tạo khung physic body cho các nhân vật chuyển động như thế nào.? Các bài sau sẽ trả lời cho bạn nhé.

P/S: Trong bài này có 1 bug: là khi di chuyển con Gấu tới 1 điểm, nếu ta lick đúp sẽ thấy có lúc con gấu sẽ không bước chân mà chỉ trượt đi. Mọi người tìm cách fix lỗi giúp nhé.

Xin chào và hẹn gặp lại!

Bài 20: Học làm game thứ 3: Sushi Crush - Like Candy Crush or Bejewer ( Part 1)
More about

Template blogspot mới cực đẹp

Người đăng: chisenhungsuutam on Chủ Nhật, 25 tháng 5, 2014

Lang thang trên các trang mạng nước ngoài và sưu tầm được một template blogspot nhìn khá là đẹp. Bỏ thời gian ra tìm hiểu thì mới biết mẫu template blogspot này hỗ trợ seo rất tốt. 

Mô tả cơ bản về giao diện: 

Đây là mẫu  gồm 2 cột chính với màu tông màu chủ đạo là đen và đỏ. Các đường viền trên các thanh menu, slidebar được thiết kế đơn giản mà tinh tế. 
Trong phần slidebar của template blogspot có trang bị sẵn hiệu ứng đẹp mắt và cuốn hút người xem. 
Với bài đăng: Mẫu đã có chèn sẵn chức năng chia sẻ bài đăng tới tất cả các mạng xã hội lớn trên thế giới, có phần bài đăng liên quan, phần comment được đóng khung và cho sáng nổi bật tên tác giả comment. 
Mình đã kiểm tra code html của mẫu này, nó hoàn toàn nhẹ, dễ chỉnh sửa và được tối ưu hóa về seo như: thẻ tiêu đề, h1, h2,..Đây là template blogspot rất thích hợp cho những ai muốn sử dụng blogspot để seo các từ khóa quang trọng. 
và đây là giao diện của template blogspot này
template blogspot
Template blogspot
Bạn xem demo và download tại đây:
 http://bloggertemplatestore.com/downloads/focused.zip

Ngoài ra bạn có thể xem các template blogspot khác tại đây: 

More about