programming_tutorials/02_sdl_basics/13_sdl_input_app.txt

124 lines
4.2 KiB
Plaintext

Készítsünk egy újat / fejlesszük tovább a MainScene osztályt, amely a benne tárolt
Sprite-ot w, a, s, d gombok lenyomására képes a megfelelő irányogba mozgatni,
és a kamerát is átméretezi, az ablak átméretezésekor.
Az UML diagram:
|---------------------------------------------------------------------------------------|
| 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 |
|---------------------------------------------------------------------------------------|
A függvények pszeudokódja:
----------------------------------------------------------------------------
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
Itt csak letároljuk, hogy mely gombok vannak ép lenyomva.
----------------------------------------------------------------------------
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)
Itt mozgatjuk a sprite-ot.
----------------------------------------------------------------------------
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
----------------------------------------------------------------------------