programming_tutorials/25_sdl_input_app.txt

123 lines
2.1 KiB
Plaintext

class MainScene : public Scene {
public:
void event(const SDL_Event &ev);
void update(float delta);
void render();
MainScene();
~MainScene();
Camera *_camera;
Image *_image;
Texture *_texture;
Sprite *_sprite;
bool _up;
bool _down;
bool _left;
bool _right;
};
#include "main_scene.h"
#include "renderer.h"
#include "rect2.h"
#include <SDL.h>
void MainScene::event(const SDL_Event &ev) {
switch (ev.type) {
case SDL_WINDOWEVENT: {
switch (ev.window.event) {
case SDL_WINDOWEVENT_SIZE_CHANGED: {
int width = ev.window.data1;
int height = ev.window.data2;
_camera->viewport = Rect2(0, 0, width, height);
break;
}
}
break;
}
case SDL_KEYDOWN: {
if (ev.key.keysym.scancode == SDL_SCANCODE_A) {
_left = true;
} else if (ev.key.keysym.scancode == SDL_SCANCODE_W) {
_up = true;
} else if (ev.key.keysym.scancode == SDL_SCANCODE_S) {
_down = true;
} else if (ev.key.keysym.scancode == SDL_SCANCODE_D) {
_right = true;
}
break;
}
case SDL_KEYUP: {
if (ev.key.keysym.scancode == SDL_SCANCODE_A) {
_left = false;
} else if (ev.key.keysym.scancode == SDL_SCANCODE_W) {
_up = false;
} else if (ev.key.keysym.scancode == SDL_SCANCODE_S) {
_down = false;
} else if (ev.key.keysym.scancode == SDL_SCANCODE_D) {
_right = false;
}
break;
}
}
}
void MainScene::update(float delta) {
if (_up) {
_sprite->set_y(_sprite->get_y() - 50 * delta);
}
if (_down) {
_sprite->set_y(_sprite->get_y() + 50 * delta);
}
if (_left) {
_sprite->set_x(_sprite->get_x() - 50 * delta);
}
if (_right) {
_sprite->set_x(_sprite->get_x() + 50 * delta);
}
}
void MainScene::render() {
Renderer::get_singleton()->clear();
_camera->bind();
Renderer::get_singleton()->draw_sprite(_sprite);
}
MainScene::MainScene() {
_camera = new Camera();
_image = new Image("ti.bmp");
_texture = new Texture(_image);
_sprite = new Sprite(_texture);
_up = false;
_down = false;
_left = false;
_right = false;
}
MainScene::~MainScene() {
_texture->free();
_image->free();
delete _sprite;
delete _texture;
delete _image;
delete _camera;
}