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