Game C++ Phần 2 – B9: Xử lý vấn đề đạn bắn trong game
Hello. Chào mừng các bạn ghé thăm blog và chủ đề:
Lập trình game c++ sdl phần 2
Trong bài số 9 này chúng ta sẽ cùng xây dựng kỹ thuật xử lý đạn bắn trong game.
Được gọi là lớp BulletObject cũng được kế thừa từ BaseObject.
#ifndef BULLET_OBJECT_H_ #define BULLET_OBJECT_H_ #include "BaseObject.h" #include "CommonFunc.h" class BulletObject : public BaseObject { public: BulletObject(); ~BulletObject(); enum BulletDir { DIR_RIGHT = 20, DIR_LEFT = 21, DIR_UP = 22, DIR_UP_LEFT = 23, DIR_UP_RIGHT = 24, DIR_DOWN_LEFT = 25, DIR_DOWN_RIGHT = 26, DIR_DOWN = 27, }; enum BulletType { SPHERE_BULLET = 50, LASER_BULLET = 51, }; void set_x_val(const int& xVal) {x_val_ = xVal;} void set_y_val(const int& yVal) {y_val_ = yVal;} int get_x_val() const {return x_val_;} int get_y_val() const {return y_val_;} void set_is_move(const bool& isMove) {is_move_ = isMove;} bool get_is_move() const {return is_move_;} void set_bullet_dir(const unsigned int& bulletDir) {bullet_dir_ = bulletDir;} unsigned int get_bullet_dir() const {return bullet_dir_;} void set_bullet_type(const unsigned int& bulletType) {bullet_type_ = bulletType;} unsigned int get_bullet_type() const {return bullet_type_;} void HandleMove(const int& x_border, const int& y_border); bool LoadImgBullet(SDL_Renderer* des); private: int x_val_; int y_val_; bool is_move_; unsigned int bullet_dir_; unsigned int bullet_type_; };
BulletObject không cần hiệu ứng động hay animation, trừ khi bạn muốn thêm nó vào cho sinh động.
BulletObject có thể có nhiều dạng đạn bắn khác nhau, và các hướng bắn cũng khác nhau.
#include "BulletObject.h" BulletObject::BulletObject() { x_val_ = 0; y_val_ = 0; is_move_ = false; bullet_type_ = SPHERE_BULLET; } BulletObject::~BulletObject() { } bool BulletObject::LoadImgBullet(SDL_Renderer* des) { bool ret = false; if (bullet_type_ == LASER_BULLET) { ret = LoadImg("img//laser_bullet.png", des); } else { ret = LoadImg("img//sphere_bullet.png", des); } return ret; } void BulletObject::HandleMove(const int& x_border, const int& y_border) { if (bullet_dir_ == DIR_RIGHT) { rect_.x += x_val_; if (rect_.x > x_border) { is_move_ = false; } } else if (bullet_dir_ == DIR_LEFT) { rect_.x -= x_val_; if (rect_.x < 0) { is_move_ = false; } } else if (bullet_dir_ == DIR_UP) { rect_.y -= y_val_; if (rect_.y < 0) { is_move_ = false; } } else if (bullet_dir_ == DIR_UP_LEFT) { rect_.x -= x_val_; if (rect_.x < 0) { is_move_ = false; } rect_.y -= y_val_; if (rect_.y < 0) { is_move_ = false; } } else if (bullet_dir_ == DIR_UP_RIGHT) { rect_.x += x_val_; if (rect_.x > x_border) { is_move_ = false; } rect_.y -= y_val_; if (rect_.y < 0) { is_move_ = false; } } else if (bullet_dir_ == DIR_DOWN_LEFT) { rect_.x -= x_val_; if (rect_.x < 0) { is_move_ = false; } rect_.y += y_val_; if (rect_.y > y_border) { is_move_ = false; } } else if (bullet_dir_ == DIR_DOWN_RIGHT) { rect_.x += x_val_; if (rect_.x > x_border) { is_move_ = false; } rect_.y += y_val_; if (rect_.y > y_border) { is_move_ = false; } } }
Ok. Hãy cùng thực hành lớp đạn bắn cho game.
1. Xây dựng lớp đạn bắn cho game
2. Xử lý hướng đạn bắn
3. Xây dựng hướng đạn bắn.