programming_tutorials/25_sdl_input_app.txt

126 lines
3.5 KiB
Plaintext

|---------------------------------------------------------------------------------------|
| class MainScene : public Scene |
|---------------------------------------------------------------------------------------|
| + 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 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 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 render():
Renderer::get_singleton()->clear()
_camera->bind()
Renderer::get_singleton()->draw_sprite(_sprite)
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():
_texture->free()
_image->free()
delete _sprite
delete _texture
delete _image
delete _camera