Созданные ответы форума
-
АвторСообщения
-
Попробуй так:
C++123point.x = it->GetPosition().x + r*cos(Rot);point.y = it->GetPosition().y + r*sin(Rot);it->ApplyForceToCenter(b2Vec2(Force * (point.x – it->GetPosition().x), Force * (point.y – it->GetPosition().y)), true);Где r-> длинна ракеты, Rot-> угол ракеты.
it->ApplyForceToCenter(b2Vec2(Force * (x – it->GetPosition().x), Force * (y – it->GetPosition().y)), true);
Вы хотите перетаскивать тело за мишкой ?
Насколько я понял вы хотите 1500 тайлов сначала слепить в 1 ,и потом рисовать как 1 ?
Нет display отображает на екране, а рисует Draw. А разве 1500 элементов много ? Например у меня карта 50*80 с физикой и освещением. Проц нагружен на 30% видеокарта на 40%, 75 000 кадров в секунду.
а лучше даже так:
C++123456mapSprite.setPosition(x*16, y*16);int dist = sqrt((mapSprite.getPosition().x - viewX)*(mapSprite.getPosition().x - viewX) + (mapSprite.getPosition().y - wiewY)*(mapSprite.getPosition().y - wiewY));if (dist<600){ mapSprite.setTextureRect( sf::IntRect((map[y][x]%10-1)*16, map[y][x]/10*16, 16, 16) );window.draw(mapSprite);}C++12345678910111213int vievX=view.getCenter().x,viewY= view.getCenter().y;for (int y=0; y<CY_MAP; ++y)for (int x=0; x<CX_MAP; ++x){if (map[y][x] == 0)continue; // Фон не рисуем.mapSprite.setTextureRect( sf::IntRect((map[y][x]%10-1)*16, map[y][x]/10*16, 16, 16) ); // 16 - ширина и высота каждого спрайтаmapSprite.setPosition(x*16, y*16);int dist = sqrt((mapSprite.getPosition().x - viewX)*(mapSprite.getPosition().x - viewX) + (mapSprite.getPosition().y - wiewY)*(mapSprite.getPosition().y - wiewY));if (dist<600)window.draw(mapSprite);}Легче просто отрисовать спрайты в определенном радиусе вокруг центра камеры.
Решить ету проблему легко просто добавить код который не даст камере выходить за пределы карты. Пример :
C++123456float vievposX = pos.x; float vievposY = pos.y;if (pos.x < 400) vievposX = 400;if (pos.x > 2800) vievposX = 2800;if (pos.y < 300) vievposY = 300;if (pos.y > 560) vievposY = 560;view.setCenter(vievposX, vievposY);vievpos позиция камеры, pos позиция игрока. То есть если игрок подходит к краю карты позиция камеры фиксируеться.
А можно по конкретнее выпадающий список ето как ? Кнопки из одной точки начинают двигаться на свои места ?
10.06.2016 в 13:42 в ответ на: Выбивает такую ошибку( Ошибка 2 error C3861: move: идентификатор не найден ) #3919Так вроде зациклил или нет ?
09.06.2016 в 23:50 в ответ на: Выбивает такую ошибку( Ошибка 2 error C3861: move: идентификатор не найден ) #3907+1А почему один ? В конце 4 етапа переменная Part обнуляеться.И зачем знак : “<=”,”>=” если у спрайта нету шанса покинуть пределы области ?
09.06.2016 в 23:46 в ответ на: Выбивает такую ошибку( Ошибка 2 error C3861: move: идентификатор не найден ) #3906+11) Нельзя создавать переменные в цикле.
2) Проще просто некуда.
Создай переменную которая будет хранить этапы движения спрайта и массив контрольных точек. Направляй спрайт в контролние точки.Когда спрай окажеться в нужной контрольной точке начнеться следующий етап движения и так дале.
C++123456789int Part=0;int X[4]{600, 600, 0, 0}, y[4]{0,600,600,0};switch (Part){case 0:move(0.1,0)if(sprite.getPosition().x==X[Part]&&sprite.getPosition().y==Y[Part])Part++ break;case 1:move(0,0.1)if(sprite.getPosition().x==X[Part]&&sprite.getPosition().y==Y[Part])Part++break;case 2:move(-0.1,0)if(sprite.getPosition().x==X[Part]&&sprite.getPosition().y==Y[Part])Part++ break;case 3:move(0,-0.1)if(sprite.getPosition().x==X[Part]&&sprite.getPosition().y==Y[Part])Part=0 break;}Вот как-то так.
Ето не баг вы забыли перенести сопровождающие ресурсы в папку к exe файлу.
-
АвторСообщения