diff --git a/23_sdl_button/main_scene.cpp b/23_sdl_button/main_scene.cpp index a96528b..700761b 100644 --- a/23_sdl_button/main_scene.cpp +++ b/23_sdl_button/main_scene.cpp @@ -52,7 +52,11 @@ MainScene::MainScene() { //b1->on_click = MainScene::on_first_button_clicked; - b1->on_click = []() -> void { printf("Click lambda!"); }; + //a verzió lambda 1 (this-nélkül): + //b1->on_click = []() -> void { printf("Click lambda!"); }; + + //a verzió lambda 2 (this-el): + b1->on_click = [this]() -> void { this->member_print(); }; b2 = new Button(); b2->transform = Rect2(0, 110, 100, 100); diff --git a/27_sdl_button_app.txt b/27_sdl_button_app.txt index eeaeeb3..0d17b73 100644 --- a/27_sdl_button_app.txt +++ b/27_sdl_button_app.txt @@ -1,117 +1,136 @@ -class MainScene : public Scene: -public: - void event(const SDL_Event &ev); - void update(float delta); - void render(); +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. - //ver a - static void on_first_button_clicked(); +|---------------------------------------------------------------------------------------| +| 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 | +|---------------------------------------------------------------------------------------| - //ver b - static void on_first_button_clicked_member(void* cls); - void member_print(); +A pszeudokód: - MainScene(); - ~MainScene(); - - Camera *_camera; - Image *_image; - Texture *_texture; - - Button *b1; - Button *b2; - Button *b3; -; - - -#include "main_scene.h" - -#include "rect2.h" -#include "renderer.h" - -#include - -#include +---------------------------------------------------------------------------- void event(const SDL_Event &ev): - b1->event(ev); - b2->event(ev); - b3->event(ev); + b1->event(ev) + b2->event(ev) + b3->event(ev) +---------------------------------------------------------------------------- void update(float delta): + return +---------------------------------------------------------------------------- void render(): - Renderer::get_singleton()->clear(); + Renderer::get_singleton()->clear() - _camera->bind(); + _camera->bind() - b1->render(); - b2->render(); - b3->render(); + b1->render() + b2->render() + b3->render() +---------------------------------------------------------------------------- void on_first_button_clicked(): - printf("Click!\n"); + printf("Click!\n") +---------------------------------------------------------------------------- void on_first_button_clicked_member(void* cls): if (cls): - reinterpret_cast(cls)->member_print(); + reinterpret_cast(cls)->member_print() +---------------------------------------------------------------------------- void member_print(): - printf("Click Member!\n"); + printf("Click Member!\n") +---------------------------------------------------------------------------- MainScene(): - _camera = new Camera(); - _image = new Image("ti.bmp"); - _texture = new Texture(_image); + _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)); - b1->on_click = on_first_button_clicked; + 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!"); }; - 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; + //a verzió lambda 2: + b1->on_click = [this]() -> void { this->member_print(); }; - 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; + 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(); + _texture->free() + _image->free() - delete b1->up; - delete b1->down; - delete b1->hover; - delete b1; + delete b1->up + delete b1->down + delete b1->hover + delete b1 - delete b2->off; - delete b2; + delete b2->off + delete b2 - delete b3->up; - delete b3->down; - delete b3->hover; - delete b3; - - delete _texture; - delete _image; - delete _camera; + delete b3->up + delete b3->down + delete b3->hover + delete b3 + delete _texture + delete _image + delete _camera +----------------------------------------------------------------------------