mirror of
https://github.com/Relintai/programming_tutorials.git
synced 2025-04-21 21:51:22 +02:00
124 lines
4.2 KiB
Plaintext
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
|
|
|
|
----------------------------------------------------------------------------
|