2016-02-28 3 views
0

Я делаю игру для пинг-понга, используя SFML, и мяч является квадратом. Я посмотрел учебники, и по какой-то причине я не могу заставить мяч двигаться. Я использовал инструкции cout для проверки положения мяча, но он просто выводит исходное положение. Я подозреваю, что с моей математикой что-то не так ... но мяч должен двигаться.Перемещение мяча в SFML

void ball_traits(sf::RectangleShape ball, sf::RectangleShape leftPaddle) 
{ 
    double ballSpeed = 5; 
    int angle = 90; 

    //Scale X and Y will give the angle 
    double scaleX = cos(angle); 
    std::cout << scaleX << std::endl; 
    double scaleY = sin(angle); 
    double velocityX = scaleX * ballSpeed; 
    double velocityY = scaleY * ballSpeed; 
    //take original position 
    double moveX = ball.getPosition().x; 
    double moveY = ball.getPosition().y; 

    sf::Clock clock; 
    double elapsed = clock.restart().asSeconds(); 

    moveX += velocityX * elapsed; 
    moveY += velocityY * elapsed; 
    std::cout << moveX << std::endl; 
    std::cout << moveY << std::endl; 
    ball.move(moveX, moveY); 
} 

Я просто хочу быть нажатой в правильном направлении. Это моя первая игра, и мои навыки на C++ немного ржавые. [Обновить] Я забыл передать объект по ссылке (лицевая ладонь).

+0

Не уверен, что это единственная проблема, но функции C 'cos' и' sin' принимают радианы, а не градусы. –

+0

При переполнении стека вы отмечаете ответ как принятый вместо редактирования названия вашего вопроса с помощью «Разрешено» :) – twsaef

ответ

2

Я думаю, что прошедшее время очень близко к нулю. Это ноль. Да. Вы должны объявить часы в качестве глобальной переменной.

И вы должны использовать радиан для функций sin и cos.

+0

Моя ошибка. И даже если я объявлю, что часы, так как глобальные не пройдут, все еще будут очень близки к 0? – ZhangBing

+0

Да, но это не будет 0.0000000000000000000000000. Кстати, вы можете установить частоту кадров с помощью метода setFrameRate, что метод класса RenderScreen. Пример: Window.setFrameRate (60); – sunofkyuss

+0

Спасибо! Вы видите какое-либо улучшение, которое я могу сделать для математической логики? Я просто хотел, чтобы мяч двигался прямо сейчас. – ZhangBing

Смежные вопросы