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 ----------------------------------------------------------------------------