Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111

Пул объектов

06.08.2022, 22:42. Показов 1388. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вообщем, не особо я понимаю как именно работает этот "метод пула", но мне он определенно нужен. я нашел 2 примера которые вроде как делают то что мне нужно, но при адаптации на себя оно выдает ошибку
пример 1
пример 2
а теперь конкретнее: в первом примере выдает
C++
1
Error LNK2001 unresolved external symbol "public: static class EntityPool * EntityPool::instance" (?instance@EntityPool@@2PEAV1@EA)
во втором примере выдает
C++
1
Error C2512 'Entity::Entity': no appropriate default constructor available
(хотя во втором примере я не особо понял как сделать рендер нормальный поэтому решил без него попытаться)

при необходимости могу скинуть свой код
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2022, 22:42
Ответы с готовыми решениями:

Выбор объектов возвращает слишком много объектов
Делаю выбор объекта. Рисую объекты: ... GL.InitNames() ... Dim temp As Integer temp = 1 For i As Integer = 1 To NM

Пул из 1000 объектов
Что использовать для того, чтобы можно было содержать большой-большой список объектов, находить в нем ближайший элемент в игровом мире,...

Как создать пул объектов для 2D игры
Решил создать обычный платформер, где на тебя падают объекты, а ты должен от них уклоняться. В итоге у меня получилось написать скрипт,...

20
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
06.08.2022, 22:50
Цитата Сообщение от Ogn1k Посмотреть сообщение
при необходимости могу скинуть свой код
необходимость есть
0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
06.08.2022, 23:00  [ТС]
объект пула
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#pragma once
 
#include "Sprite2.h"
class Entity 
{
public:
    Sprite2 sprite;
    RenderTarget* target;
    bool active;
    Entity()
    {
        active = false;
    }
 
    void setTarget( RenderTarget* target)
    {
        this->target = target;
        
    }
    void setTexture(Texture* texture)
    {
        sprite.getTexture() = *texture;
    }
 
    void setPos(float x, float y)
    {
        sprite.sprite.setPosition(x, y);
    }
 
    void setActive(bool active)
    {
        this->active = active;
            
    }
 
    virtual void render(RenderTarget* target)
    {
        if (active)
            sprite.render(target);
    }
};


пуллер
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#pragma once
 
#include "PoolObject.h"
#include <assert.h>
#include <iostream>
#include <list>
class EntityPool
{
private:
    std::list<Entity*> resources;
 
    static EntityPool* instance;
    EntityPool() {}
 
public:
 
    static EntityPool* getInstance()
    {
        if (instance == 0)
        {
            instance = new EntityPool;
        }
        return instance;
    }
 
    Entity* getResource()
    {
        if (resources.empty())
        {
            std::cout << "Creating new." << std::endl;
            return new Entity;
        }
        else
        {
            std::cout << "Reusing existing." << std::endl;
            Entity* entity = resources.front();
            resources.pop_front();
            return entity;
        }
    }
 
    void returnResource(Entity* object)
    {
        object->setActive(false);
        resources.push_back(object);
    }
};


"мейн"
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
lvl1()
{
buttonTexture.loadFromFile("textures/Untitled.png");
o1 = pool->getResource();
    o1->setTexture(&buttonTexture);
}
update(const float& deltatime)
{
if (Mouse::isButtonPressed(Mouse::Left))
    {
        o1->setActive(true);
        o1->setPos(Mouse::getPosition().x, Mouse::getPosition().y);
    }
    if (o1->active)
    {
        o1->setPos(o1->sprite.getPosition().x, o1->sprite.getPosition().y - 1 * deltatime);
    }
    //if (o1->sprite.getPosition().y >= windowSize.height / 2)
    if (Mouse::isButtonPressed(Mouse::Right))
    {
        o1->setActive(false);
        pool->returnResource(o1);
    }
}
render(RenderTarget* target)
{
o1->setTarget(target);
o1->render(target);
}


это первый пример, код для второго примера я не уверен что у меня сохранился так что если нужен будет он то придется переписывать все
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
06.08.2022, 23:07
Цитата Сообщение от Ogn1k Посмотреть сообщение
static EntityPool* instance;
добавь inline
или в каком-нибудь одном cpp файле сделай определение:
C++
1
EntityPool* EntityPool::instance;
Цитата Сообщение от Ogn1k Посмотреть сообщение
не особо я понимаю как именно работает этот "метод пула", но мне он определенно нужен
А вот тут подробнее, т.к. твой "пул" для полиморфных объектов - это хрень
1
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
06.08.2022, 23:32  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
добавь inline
C++
1
2
Error (active) E0245 a nonstatic member reference must be relative to a specific object
Error (active) E2860 a nonstatic data member cannot be declared as inline
статик убрал, а дальше что... это же ссылка
а определение мне впринципе не дают сделать
Цитата Сообщение от zayats80888 Посмотреть сообщение
А вот тут подробнее
мне нужно чтобы в пуле хранилось какое-то количество одинаковых объектов которые я буду самостоятельно брать, использовать и возвращать обратно в пул(действия одинаковые), некая готовая конструкция из объекта если так можно выразиться? раньше делал такое на юнити, но там как-то проще с этим
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
06.08.2022, 23:42
Цитата Сообщение от Ogn1k Посмотреть сообщение
статик убрал
где я говорил убрать?
C++
1
2
3
4
5
class EntityPool
{
 
    inline static EntityPool* instance = nullptr;
//...
Цитата Сообщение от Ogn1k Посмотреть сообщение
а определение мне впринципе не дают сделать
По первой ссылке обрати внимание на строку 115
Цитата Сообщение от Ogn1k Посмотреть сообщение
мне нужно чтобы в пуле хранилось какое-то количество одинаковых объектов
Ну ок, только у тебя Entity полиморфный класс, так что его наследников туда пихать не нужно, иначе каша получится.
0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
07.08.2022, 00:10  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
где я говорил убрать?
те же ошибки, кроме того добавилось
C++
1
Error (active) E0246 a nonstatic data member may not be defined outside its class
но это уже наверное не важно потому что
Цитата Сообщение от zayats80888 Посмотреть сообщение
По первой ссылке обрати внимание на строку 115
определение заработало, ну и сама программа запускается xd(правда то что я там сделал не работает как задумано, но с этим разберусь уже надеюсь)
так что можно считать проблема решена?
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
07.08.2022, 00:13
Цитата Сообщение от Ogn1k Посмотреть сообщение
те же ошибки, кроме того добавилось
Ты либо что-то не так делаешь, либо не умеешь читать:
Цитата Сообщение от zayats80888 Посмотреть сообщение
добавь inline
или в каком-нибудь одном cpp файле сделай определение
0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
07.08.2022, 00:20  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ты либо что-то не так делаешь, либо не умеешь читать:
в начале все по инструкции, если не работает меняю что-то что возможно будет работать, прочитал правильно, просто попробовал оба способа, раздельно конечно
0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
08.08.2022, 18:10  [ТС]
немного стыдно писать здесь опять, но я не вижу смысла создавать новую тему потому что она все равно во многом будет связана с этой ... вообщем я решил отказаться от примера 1 по некоторым причинам и взял пример 2, он работает как надо, но я не очень понимаю как мне удалять определенные копии объектов или в целом взаимодействовать с ними через класс. я попытался переписать функции класса "player" в свой класс чтобы сразу делать все там, но на этапе рендера у меня появились проблемы с "renderStates" - исключение "Access violation reading location", насколько я понял это нужно для шейдеров
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void lvl1::updateIcon(const float& dt)
{
    for (size_t i{}; i < m_bullets.size();)
    {
        if (m_bullets[i]->life_time < 0 )
        {
            std::swap(m_bullets[i], m_bullets.back());
            EntityPool::instance().destroy(m_bullets.back());
            m_bullets.pop_back();
        }
        else
        {
            m_bullets[i]->update(dt);
            ++i;
        }
    }
}
void lvl1::shoot(sf::Vector2f target)
{
    const auto pos = bullet_sprite.getPosition();
    target -= pos;
    target /= std::hypot(target.x, target.y);
    auto bull = EntityPool::instance().create(pos, target);
    if (bull) m_bullets.push_back(bull);
}
void lvl1::update(const float& deltatime)
{
    updateIcon(deltatime);
        if (Mouse::isButtonPressed(Mouse::Left))
        {
            bullet_sprite.setPosition(mousePosView);
            std::cout << "a";
            shoot(Vector2f(bullet_sprite.getPosition().x, windowSize.height));
 
        }
}
void lvl1::render(RenderTarget* target, RenderStates* states)
{
auto st = *states;
    for (auto bull : m_bullets)
    {
        st.transform = states->transform;
        st.transform.translate(bull->m_pos);
        target->draw(bullet_sprite);
    }
    states->transform *= bullet_sprite.getTransform();
 
}
(вектор объектов и спрайт определены в хедере)
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
08.08.2022, 19:09
Цитата Сообщение от Ogn1k Посмотреть сообщение
вообщем я решил отказаться от примера 1 по некоторым причинам
По каким?
Тебе пул для чего нужен:
1) ограничить максимальное число инстансов объектов какого-то типа - для этого достаточно гобального счетчика
2) снизить затраты на динамическую аллокацию/создание объектов - возьми нормальный аллокатор пула (напр., в с++17 есть std::pmr::unsynchronized_pool_resource)
3) или по другой причине?
Цитата Сообщение от Ogn1k Посмотреть сообщение
void lvl1::render(RenderTarget* target, RenderStates* states)
{
auto st = *states;
    for (auto bull : m_bullets)
    {
        st.transform = states->transform;
        st.transform.translate(bull->m_pos);
        target->draw(bullet_sprite);
    }
    states->transform *= bullet_sprite.getTransform();
}
Объясни мне, что тут происходит и как ты эту функцию вызываешь.

Не по теме:

Похоже ты вообще не понимаешь, что пишешь...

0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
08.08.2022, 20:00  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
По каким?
ну, у меня там не получается динамически изменять количество объектов которые я могу использовать, а тут можно просто счетчик поставить и наверное все будет работать
Цитата Сообщение от zayats80888 Посмотреть сообщение
Тебе пул для чего нужен:
2, только я с этими пулами не очень разбираюсь поэтому все так плохо
Цитата Сообщение от zayats80888 Посмотреть сообщение
Объясни мне, что тут происходит и как ты эту функцию вызываешь.
для начала обращу внимание на обьявление в хедере на всякий случай:
C++
1
void render(RenderTarget* target = nullptr, RenderStates* states = nullptr);
тут у меня рисуются все объекты(типо target->draw(object); если это стандартный объект из сфмла либо object.render(target); если это мой объект), эта функция наследуется из другого класса(сцены), у меня есть стек с объектами этого класса(сцены) в основном классе. я туда добавляю свой класс-наследник, и в этом же основном классе у меня используются все основные функции класса-сцены - run()(в котором класс update, render, updateDeltaTime) и initScenes()(в нем инициализируется конструктор класса-сцены ну и добавляется в стек) вообщем, на всякий случай помещу ссылку на проект чтобы можно было самому еще посмотреть структуру и сюда не скидывать много

Не по теме:

Цитата Сообщение от zayats80888 Посмотреть сообщение
Похоже ты вообще не понимаешь, что пишешь...
голова немного проясняется, но до меня все еще не доходит, поэтому прошу помощи

0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
08.08.2022, 22:05
Цитата Сообщение от Ogn1k Посмотреть сообщение
ну, у меня там не получается динамически изменять количество объектов которые я могу использовать, а тут можно просто счетчик поставить и наверное все будет работать
Нет, там как раз можно поставить счетчик, а во втором варианте ты не можешь увеличить размер пула, т.к. это приведет к инвалидации указателей(макс размер можно указать только при создании пула или константой времени компиляции).
Цитата Сообщение от Ogn1k Посмотреть сообщение
2, только я с этими пулами не очень разбираюсь поэтому все так плохо
Ну так попробуй разобраться, а "всё так плохо" потому, что вместо изучения программирования, решения простых задач и т.д. ты занимаешься копипастой кода, который не понимаешь.
Цитата Сообщение от Ogn1k Посмотреть сообщение
для начала обращу внимание на обьявление в хедере на всякий случай
Ну и что будет происходить внутри функции, если хотя бы один параметр будет nullptr?
Например тут:
Цитата Сообщение от Ogn1k Посмотреть сообщение
auto st = *states;
И зачем тебе st, если ты его нигде не используешь?

Короче, покажи определение класса, объекты которого ты хочешь запулить и напиши интерфейс пула(только объявления методов, которые тебе нужны), а я тебе напишу реализацию (только учти, реализацию тебе будет запрещено трогать, так что хорошо подумай над интерфейсом).
0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
11.08.2022, 16:08  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ну так попробуй разобраться, а "всё так плохо" потому, что вместо изучения программирования, решения простых задач и т.д. ты занимаешься копипастой кода, который не понимаешь.
я не копипастер... я разобрался в этом шаблоне, написал то что мне надо и оно работает почти как надо, почти это то что после переиспользования объектов скорость почему-то увеличивается, хотя я вроде все сбрасываю
объект
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Entity 
{
    const sf::Vector2f nullVector = sf::Vector2f(0, 0);
    sf::Texture nullTexture;
    static constexpr float speed = 200.0f;
 
    sf::Vector2f position;
    sf::Vector2f direction;
    sf::Sprite sprite;
    bool active=false;
 
public:
    
 
    Entity() { active = true; }
 
    void setActive(bool act) { active = act; }
    void setTexture(sf::Texture* texture) { sprite.setTexture(*texture); }
    void setTextureRect(sf::IntRect intrect) { sprite.setTextureRect(intrect); }
    void setPosition(sf::Vector2f pos) { position = pos; }
    sf::Vector2f getPos() { return position; }
 
    void shoot(sf::Vector2f dir)
    {
        
        direction = dir;
        
    }
 
    void reset()
    {
        position = nullVector;
        direction = nullVector;
        sprite.setTexture(nullTexture);
        active = false;
    }
 
    void update(float dt)
    {
        
            position += direction * dt * speed;
            sprite.setPosition(position);
        
        
    }
 
    void render(RenderTarget* target)
    {
        if(active)
            target->draw(sprite);
    }
};

пул
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class EntityPool
{
    EntityPool(){}
    std::list<Entity*> entities;
    static EntityPool* instance;
public:
    
    static EntityPool* getInstance()
    {
        if (instance == 0)
        {
            instance = new EntityPool;
        }
        return instance;
    }
 
    Entity* create(Vector2f pos, Texture* tex, IntRect offset)
    {
        if (!entities.empty())
        {
            std::cout << "reusing";
            Entity* entity = entities.front();
            entity->setPosition(pos);
            entity->setTexture(tex);
            entity->setTextureRect(offset);
            entity->setActive(true);
            entities.pop_front();
            return entity;
        }
        else
        {
            std::cout << "new";
            Entity* ent = new Entity;
            ent->setPosition(pos);
            ent->setTexture(tex);
            ent->setTextureRect(offset);
            return ent;
        }
        
    }
 
    void returnObj(Entity* ent)
    {
        
        ent->reset();
        entities.push_back(ent);
    }
};

"мейн"
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void lvl1::updateSomething(const float& deltatime)
{
    if (foodIcon.sprite.getColor() == Color(255, 255, 255, 255) && !foodMenu)
    {
        if (Mouse::isButtonPressed(sf::Mouse::Left))
        {
            Entity* tempEnt = pool->create(mousePosView, &buttonTexture, offsetX);
            std::cout << tempEnt << std::endl;
            objs.push_front(tempEnt);
            //p.setPosition(mousePosView);
            std::cout << "a";
            //p.shoot(Vector2f(p.getPosition().x, windowSize.height));
        }
    }
    for (auto i : objs)
    {
        //i->shoot(Vector2f(i->getPos().x, windowSize.height));
        i->shoot(Vector2f(0, 1));
        i->update(deltatime);
        //
        
        if (i->getPos().y >= windowSize.height/2)
        {
 
            pool->returnObj(i);
        }
    }
}
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
11.08.2022, 16:28
Цитата Сообщение от Ogn1k Посмотреть сообщение
почти это то что после переиспользования объектов скорость почему-то увеличивается, хотя я вроде все сбрасываю
скорость чего?
0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
11.08.2022, 16:41  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
скорость чего?
скорость объекта, если создать новый объект вместе с уже использованным скорость нового объекта будет меньше нового
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
11.08.2022, 16:53
Цитата Сообщение от Ogn1k Посмотреть сообщение
скорость объекта
скорость у тебя константа, направление(direction) у тебя тоже константа (0, 1), deltatime однакова для всех объектов - делаем вывод, что ты показал не тот код, который компилируешь...
0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
11.08.2022, 18:09  [ТС]
я без понятия... просто скопировал оттуда... могу полный мейн выгрузить если это что-то скажет еще, но пул используется тут в основном только в той функции. на всякий еще скину демонстрацию
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include "lvl1.h"
EntityPool* EntityPool::instance = 0;
lvl1::lvl1(RenderWindow* window)
    : Scene(window)
{
    std::ifstream ifs("config.ini");
 
    if (ifs.is_open())
    {
        ifs >> windowSize.width >> windowSize.height;
    }
    ifs.close();
    menuRect.setPosition(0, 0);
    menuRect.setFillColor(Color(37, 197, 230));
    background.setPosition(0, menuRect.getSize().y);
    background.setFillColor(Color(255, 255, 255));
    foodI.setColor(Color::Black);
    foodI.setScale(0.4, 0.4);
    cirniS.setScale(1.4, 1.4);
    countText.setPos(15, 8);
    foodIcon.setScale(1, 1);
    foodIcon.setColorSimple(Color(255, 255, 255, 0));
 
    menu();
}
 
void lvl1::menu()
{
    fmriSize = Vector2f(windowSize.width / 1.23, windowSize.height / 1.23);
    foodMenuRectIn = RectangleShape(fmriSize);
    foodMenuRectIn.setPosition(windowSize.width / 13, windowSize.height / 9);
    foodMenuRectIn.setFillColor(Color(37, 197, 230));
 
    fmroSize = Vector2f(windowSize.width / 1.2, windowSize.height / 1.2);
    foodMenuRectOut = RectangleShape(fmroSize);
    foodMenuRectOut.setPosition(windowSize.width / 15, windowSize.height / 10);
    foodMenuRectOut.setFillColor(Color(28, 159, 186));
 
    buttonTexture.loadFromFile("textures/Untitled.png");
}
 
lvl1::~lvl1()
{
}
 
void lvl1::endScene()
{
    //saving
}
 
void lvl1::updateSomething(const float& deltatime)
{
    if (foodIcon.sprite.getColor() == Color(255, 255, 255, 255) && !foodMenu)
    {
        if (Mouse::isButtonPressed(sf::Mouse::Left))
        {
            Entity* tempEnt = pool->create(mousePosView, &buttonTexture, offsetX);
            std::cout << tempEnt << std::endl;
            objs.push_front(tempEnt);
            //p.setPosition(mousePosView);
            std::cout << "a";
            //p.shoot(Vector2f(p.getPosition().x, windowSize.height));
        }
    }
    for (auto i : objs)
    {
        //i->shoot(Vector2f(i->getPos().x, windowSize.height));
        i->shoot(Vector2f(0, 1));
        i->update(deltatime);
        //
        
        if (i->getPos().y >= windowSize.height/2)
        {
 
            pool->returnObj(i);
        }
    }
}
 
void lvl1::updateSfmlEvents(Event event)
{
    if (event.type == sf::Event::MouseButtonPressed)
    {
        if (cirniS.getRect().contains(Mouse::getPosition(*window)) && event.mouseButton.button == sf::Mouse::Left && !foodMenu)
        {
            countText.setString(std::to_string(count));
            count++;
        }
        if (foodI.getRect().contains(Mouse::getPosition(*window)) && event.mouseButton.button == sf::Mouse::Left)
        {
            foodMenu = !foodMenu;
        }
        
    }
}
void lvl1::updateInput(const float& deltatime)
{
    checkForQuit();
}
 
void lvl1::updateMenu()
{
    buttonsMesh.resize(6, std::vector<button>());
 
    if (foodMenu)
    {
        for (int x = 0; x < 6; x++)
        {
            buttonsMesh[x].resize(6, button());
            for (int y = 0; y < 6; y++)
            {
                buttonsMesh[x][y] = button(windowSize.width / 10 + x * gridSize, windowSize.width / 8 + y * gridSize, 440, 100, "some text", &buttonTexture, Color::White, Color::Yellow, Color::Green);
                buttonsMesh[x][y].buttonS.setTextureRect(IntRect(x * 40, 0, 40, 40));
                buttonsMesh[x][y].update(mousePosView);
                if (buttonsMesh[x][y].isPressed())
                {
                    offsetX = IntRect(x * 40, 0, 40, 40);
                    foodIcon.setColorSimple(Color(255, 255, 255, 255));
                    foodIcon.sprite.setTextureRect(offsetX);
                    
                }
            }
        }
    }
}
 
void lvl1::update(const float& deltatime)
{
    //p.update(deltatime);
    updateSomething(deltatime);
 
    updateInput(deltatime);
    updateMousePosition();
 
    updateMenu();
 
    //
}
 
void lvl1::render(RenderTarget* target, RenderStates* states)
{
    if (!target)
        target = window;
 
    target->draw(background);
    target->draw(menuRect);
    foodI.render(target);
    cirniS.render(target);
    countText.render(target);
    foodIcon.render(target);
    if (foodMenu)
    {
        target->draw(foodMenuRectOut);
        target->draw(foodMenuRectIn);
    }
    for (int x = 0; x < 6; x++)
    {
        for (int y = 0; y < 1; y++)
        {
            if (foodMenu)
            {
                buttonsMesh[x][y].render(target);
            }
            //target->draw(p);
            for (auto i : objs)
            {
                i->render(target);
            }
        }
    }
}
Вложения
Тип файла: mp4 2022-08-11 20-08-05.mp4 (1.41 Мб, 6 просмотров)
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
11.08.2022, 18:46
Цитата Сообщение от Ogn1k Посмотреть сообщение
я без понятия
пересобери проект


Не по теме:

там в студии в одном из пунктов меню вверху есть опция "rebuild solution"(пересобрать решение) или как-то так

0
 Аватар для Ogn1k
3 / 3 / 1
Регистрация: 08.02.2020
Сообщений: 111
11.08.2022, 19:06  [ТС]
ничего не изменилось... а должно было?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2022, 19:06
Помогаю со студенческими работами здесь

Пул
Расскажите, пожалуйста, о пуле.

Пул поток
Здравствуйте, есть программа, которую сам написал для создания и тестирования пула потоков. Единственное что осталось сделать, это...

Пул соединений
Чтобы использовать пул соединений, необходимо один раз создать connection SqlConnection connection = new SqlConnection(); ...

Пул адресов
Привет В предприятии стоит роутер Keenetic с такими параметрами: Пул = 20. Т.е. только 20 компьютеров подключаются к интернету??? А...

Маршрутизация на пул..
Подскажите плз как прописать маршрутизацию на пул адресов.. Требуется маршрутизация 195.12.246.* и 195.12.247.* на шлюзак 192.168.1.1 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Сравнение GCC 14 и Clang 18 компиляторов C для HPC
bytestream 08.06.2025
В высокопроизводительных вычислениях (HPC) выбор компилятора - это ход, способный радикально изменить производительность всей системы. Работая последние 15 лет с критическими HPC-системами, я видел. . .
Всё о конфигурации ASP.NET Core
stackOverflow 08.06.2025
Старый добрый web. config, похоже, отправился на пенсию вместе с классическим ASP. NET. За годы работы с различными проектами я убедился, что хорошо организованная конфигурация – это половина успеха. . .
dev-c++5.11 Продолжаю движение.
russiannick 08.06.2025
Казалось, день прошел впустую. Просмотрел кучу видео и только потом заметил заголовок - уроки си. Искусители сбивали новичка с пути с++. Так легко ошибиться когда вокруг столько яп содержащих в. . .
Квантовые алгоритмы и обработка строк в Q#
EggHead 07.06.2025
Квантовые вычисления перевернули наше представление о том, как работать с данными, а Q# стал одним из ключевых языков для разработки квантовых алгоритмов. В традиционых системах мы оперируем битами —. . .
NUnit и C#
UnmanagedCoder 07.06.2025
В . NET существует несколько фреймворков для тестирования: MSTest (встроенный в Visual Studio), xUnit. net (более новый фреймворк) и, собственно, NUnit. Каждый имеет свои преимущества, но NUnit. . .
с++ Что нового?
russiannick 06.06.2025
Продолжаю обзор dev-cpp5. 11. Посмотрев на проекты, предоставленные нам для обучения, становится видно, что они разные по содержащимся файлам где: . dev обязательно присутствует . cpp/ . c один из них. . .
WebAssembly в Kubernetes
Mr. Docker 06.06.2025
WebAssembly изначально разрабатывался как бинарный формат инструкций для виртуальной машины, обеспечивающий высокую производительность в браузерах. Но потенциал технологии оказался гораздо шире - она. . .
Как создать первый микросервис на C# с ASP.NET Core, step by step
stackOverflow 06.06.2025
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за. . .
Рисование коллайдеров Box2D v2 на Three.js с помощью порта @box2d/core
8Observer8 06.06.2025
Используется порт Box2D v2 под названием @box2d/ core - пакет NPM. Загрузил документацию Box2D v2 на Netlify: https:/ / box2d-v2-docs. netlify. app/ Документацию Box2D v2 можно скачать с официального. . .
Как создать стек в Python
AI_Generated 05.06.2025
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »