本文整理汇总了C++中sf::RectangleShape::getSize方法的典型用法代码示例。如果您正苦于以下问题:C++ RectangleShape::getSize方法的具体用法?C++ RectangleShape::getSize怎么用?C++ RectangleShape::getSize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sf::RectangleShape
的用法示例。
在下文中一共展示了RectangleShape::getSize方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: width
float width() const noexcept { return shape.getSize().x; }
示例2: if
sf::Vector2f collide(sf::CircleShape ball, sf::RectangleShape block)
{
sf::Vector2f ball_center = ball.getPosition() + sf::Vector2f(ball.getRadius(), ball.getRadius());
sf::Vector2f block_center = block.getPosition() + sf::Vector2f(block.getSize().x/2, block.getSize().y/2);
sf::Vector2f diff = ball_center - block_center;
// Not intersecting
if(abs(diff.x) > block.getSize().x/2 + ball.getRadius() || abs(diff.y) > block.getSize().y/2 + ball.getRadius())
{
return sf::Vector2f(0,0);
}
std::cout << diff.x << ", " << diff.y << std::endl;
// hit edge of block (top/bottom)
if(abs(diff.x) <= PADDLE_WIDTH/2)
{
if(diff.y <= 0)
{
return sf::Vector2f(0,-1);
}
else if(diff.y > 0)
{
return sf::Vector2f(0,1);
}
}
// hit edge of block (left/right)
else if(abs(diff.y) <= PADDLE_HEIGHT/2)
{
if(diff.x <= 0)
{
return sf::Vector2f(-1,0);
}
else if(diff.x > 0)
{
return sf::Vector2f(1,0);
}
}
float distance = getDistance(ball_center, block.getPosition());
if(distance <= ball.getRadius())
{
return (ball_center - block.getPosition()) / distance;
}
sf::Vector2f block_corner = block.getPosition() + sf::Vector2f(block.getSize().x,0);
distance = getDistance(ball_center, block_corner);
if(distance <= ball.getRadius())
{
return (ball_center - block_corner) / distance;
}
block_corner = block.getPosition() + sf::Vector2f(0, block.getSize().y);
distance = getDistance(ball_center, block_corner);
if(distance <= ball.getRadius())
{
return (ball_center - block_corner) / distance;
}
block_corner = block.getPosition() + block.getSize();
distance = getDistance(ball_center, block_corner);
if(distance <= ball.getRadius())
{
return (ball_center - block_corner) / distance;
}
// Not intersecting, even in the corners
return sf::Vector2f(0,0);
}
示例3: main
int main(){
logger.logNoEndl("Setting up window...");
window.create(sf::VideoMode(430,430), "GL");
logger.continueln(" done!");
logger.logNoEndl("Setting up variables...");
rect1.setFillColor(sf::Color(200,200,200));
rect1.setOutlineColor(sf::Color(0,0,0));
rect1.setOutlineThickness(-2);
rect1.setPosition(10,10);
rect2.setFillColor(sf::Color(200,200,200));
rect2.setOutlineColor(sf::Color(0,0,0));
rect2.setOutlineThickness(-2);
rect2.setPosition(220,10);
rect3.setFillColor(sf::Color(200,200,200));
rect3.setOutlineColor(sf::Color(0,0,0));
rect3.setOutlineThickness(-2);
rect3.setPosition(10,220);
rect4.setFillColor(sf::Color(200,200,200));
rect4.setOutlineColor(sf::Color(0,0,0));
rect4.setOutlineThickness(-2);
rect4.setPosition(220,220);
sf::Font font;
if (!font.loadFromFile("arial.ttf")){
logger.log(Logger::LogType::Error, "Arial font not found. Cannot continue...");
return 1;
}
sf::Text label1("Solid White", font);
label1.setColor(sf::Color::Black);
label1.setPosition(rect1.getPosition().x + rect1.getSize().x / 2 - label1.getLocalBounds().width / 2, rect1.getPosition().y + rect1.getSize().y / 2 - label1.getLocalBounds().height / 2 - 10);
sf::Text label2("Marquee", font);
label2.setColor(sf::Color::Black);
label2.setPosition(rect2.getPosition().x + rect2.getSize().x / 2 - label2.getLocalBounds().width / 2, rect2.getPosition().y + rect2.getSize().y / 2 - label2.getLocalBounds().height / 2 - 10);
sf::Text label3("Color Cycle", font);
label3.setColor(sf::Color::Black);
label3.setPosition(rect3.getPosition().x + rect3.getSize().x / 2 - label3.getLocalBounds().width / 2, rect3.getPosition().y + rect3.getSize().y / 2 - label3.getLocalBounds().height / 2 - 10);
sf::Text label4("Pew", font);
label4.setColor(sf::Color::Black);
label4.setPosition(rect4.getPosition().x + rect4.getSize().x / 2 - label4.getLocalBounds().width / 2, rect4.getPosition().y + rect4.getSize().y / 2 - label4.getLocalBounds().height / 2 - 10);
unsigned short r = 0,
g = 0,
b = 0;
logger.continueln(" done!");
logger.log("Running until told to stop.");
bool running = true;
while(running){
sf::Event event;
while (window.pollEvent(event)){
if (event.type == sf::Event::Closed){
running = false;
} else if (event.type == sf::Event::MouseMoved){
doMouseMove();
} else if (event.type == sf::Event::MouseButtonPressed || event.type == sf::Event::MouseButtonReleased){
doMouseButton(event.mouseButton.button);
}
}
window.clear(sf::Color::White);
window.draw(rect1);
window.draw(rect2);
window.draw(rect3);
window.draw(rect4);
window.draw(label1);
window.draw(label2);
window.draw(label3);
window.draw(label4);
window.display();
}
logger.log("Closing...");
}
示例4: height
float height() const noexcept { return shape.getSize().y; }
示例5: draw
void draw() {
// update the mouse position and add it to the broadphase
auto mousePosition = static_cast<sf::Vector2f>(sf::Mouse::getPosition(window));
const auto mouseSize = mouseObject.getSize();
mouseObject.setPosition(mousePosition);
mousePosition -= mouseObject.getOrigin();
broadphase.addRectangle(
mousePosition.x,
mousePosition.y,
mouseSize.x,
mouseSize.y,
&mouseObject);
// move the rectangles around and add them to the broadphase
for (const auto& object : objects) {
object->setPosition(randb(0, window.getSize().x), randb(0, window.getSize().y));
const auto objectPosition = object->getPosition() - object->getOrigin();
const auto objectSize = object->getSize();
broadphase.addRectangle(
objectPosition.x,
objectPosition.y,
objectSize.x,
objectSize.y,
object);
object->setFillColor(sf::Color(0x00, 0x8B, 0x8B));
object->setOutlineColor(sf::Color::White);
}
// now query the collision pairs and change the color of objects that hit the mouse object to red
const auto &collisionPairs = broadphase.getCollisionPairs();
for (const auto &pair : collisionPairs) {
sf::RectangleShape *other = nullptr;
if (pair.first == &mouseObject)
other = (sf::RectangleShape*)pair.second;
else if (pair.second == &mouseObject)
other = (sf::RectangleShape*)pair.first;
else {
((sf::RectangleShape*)pair.first)->setOutlineColor(sf::Color::Cyan);
((sf::RectangleShape*)pair.second)->setOutlineColor(sf::Color::Cyan);
}
if (other != nullptr)
other->setFillColor(sf::Color(200, 0, 0));
}
// clear out the broadphase for the next run
broadphase.clear();
// clear the window with black color
window.clear(sf::Color::Black);
for (const auto& object : objects)
window.draw(*object);
window.draw(mouseObject);
// draw a grid to outline the buckets
const float lineThickness = 5;
const sf::Color lineColor(150, 150, 150);
sf::RectangleShape verticalLine(sf::Vector2f(lineThickness, window.getSize().y));
verticalLine.setFillColor(lineColor);
for (size_t i = 1; i < (window.getSize().x / broadphase.getCellWidth()); ++i) {
verticalLine.setPosition(i * broadphase.getCellWidth(), 0);
window.draw(verticalLine);
}
sf::RectangleShape horizontalLine(sf::Vector2f(window.getSize().x, lineThickness));
horizontalLine.setFillColor(lineColor);
for (size_t i = 1; i < (window.getSize().y / broadphase.getCellHeight()); ++i) {
horizontalLine.setPosition(0, i * broadphase.getCellHeight());
window.draw(horizontalLine);
}
}