mirror of
https://github.com/Relintai/programming_tutorials.git
synced 2025-04-21 21:51:22 +02:00
Finished up 27_sdl_button_app.txt.
This commit is contained in:
parent
def6dbf383
commit
9a7677b89c
@ -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);
|
||||
|
@ -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
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user