programming_tutorials/03_sdl_basics/15_sdl_button_app.txt

137 lines
5.1 KiB
Plaintext

Most, hogy már van gombunk, készítsünk egy újat / fejlesszük tovább a
MainScene osztályt, úgy, hogy legyen kirakva a a képernyőre néhány gomb,
és amikor rákattintunk egyre, akkor hívassunk meg egy függvényt,
magában a MainScene osztályban.
|---------------------------------------------------------------------------------------|
| class MainScene : public Scene |
|---------------------------------------------------------------------------------------|
| + void event(const SDL_Event &ev) |
| + void update(float delta) |
| + void render() |
| |
| ----------------------------------------------------------------- |
| | A.Verzió: | |
| | + static void on_first_button_clicked() | |
| | ------------------------------------------------ | |
| | B Verzióhoz: | |
| | + static void on_first_button_clicked_member(void* cls) | |
| ------------------------------------------------------------------ |
| |
| + member_print() |
| |
| + MainScene() |
| + ~MainScene() |
| |
| + Camera *_camera |
| + Image *_image |
| + Texture *_texture |
| + Sprite *_sprite |
| |
| + Button * b1 |
| + Button * b2 |
| + Button * b3 |
|---------------------------------------------------------------------------------------|
A pszeudokód:
----------------------------------------------------------------------------
void event(const SDL_Event &ev):
b1->event(ev)
b2->event(ev)
b3->event(ev)
----------------------------------------------------------------------------
void update(float delta):
return
----------------------------------------------------------------------------
void render():
Renderer::get_singleton()->clear()
_camera->bind()
b1->render()
b2->render()
b3->render()
----------------------------------------------------------------------------
void on_first_button_clicked():
printf("Click!\n")
----------------------------------------------------------------------------
void on_first_button_clicked_member(void* cls):
if (cls):
reinterpret_cast<MainScene*>(cls)->member_print()
----------------------------------------------------------------------------
void member_print():
printf("Click Member!\n")
----------------------------------------------------------------------------
MainScene():
_camera = new Camera()
_image = new Image("ti.bmp")
_texture = new Texture(_image)
b1 = new Button()
b1->transform = Rect2(0, 0, 100, 100)
b1->up = new Sprite(_texture)
b1->down = new Sprite(_texture, Color(100, 100, 100))
b1->hover = new Sprite(_texture, Color(200, 200, 200))
//a verzió alap:
//b1->on_click = MainScene::on_first_button_clicked;
//a verzió lambda 1:
//b1->on_click = []() -> void { printf("Click lambda!"); };
//a verzió lambda 2:
b1->on_click = [this]() -> void { this->member_print(); };
b2 = new Button()
b2->transform = Rect2(0, 110, 100, 100)
b2->off = new Sprite(_texture, Color(50, 50, 50))
b2->state = Button::BUTTON_STATE_OFF
b3 = new Button()
b3->transform = Rect2(0, 220, 100, 100)
b3->up = new Sprite(_texture)
b3->down = new Sprite(_texture, Color(100, 100, 100))
b3->hover = new Sprite(_texture, Color(200, 200, 200))
b3->cls = this
b3->on_click_member = on_first_button_clicked_member
----------------------------------------------------------------------------
~MainScene():
_texture->free()
_image->free()
delete b1->up
delete b1->down
delete b1->hover
delete b1
delete b2->off
delete b2
delete b3->up
delete b3->down
delete b3->hover
delete b3
delete _texture
delete _image
delete _camera
----------------------------------------------------------------------------