Finished up 27_sdl_button_app.txt.

This commit is contained in:
Relintai 2021-04-10 12:08:42 +02:00
parent def6dbf383
commit 9a7677b89c
2 changed files with 102 additions and 79 deletions

View File

@ -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);

View File

@ -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 <SDL.h>
#include <stdio.h>
----------------------------------------------------------------------------
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<MainScene*>(cls)->member_print();
reinterpret_cast<MainScene*>(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
----------------------------------------------------------------------------