2010-10-04 7 views
2

Я пытаюсь вращать объект вокруг центральной точки, подобно солнцу и нашим планетам. Однако мне не повезло. Любая помощь будет действительно велика. Благодарю. Я пишу в luna, и я не думаю, что для этого есть категория, но это, вероятно, всего лишь общий код. Но если это не в том месте, мои извинения.Объект орбиты вокруг центральной точки

local function animate(event) 

    local rads = degrees * (Math.PI/180); 
    ballOne.x = 20 * Math.cos(rad); 
    ballOne.y = 20 * Math.sin(rad); 
    degrees = degrees + 1 

end 

Runtime:addEventListener("enterFrame", animate) 

ответ

3

Вы можете попробовать 20.0 и 180.0, чтобы заставить их с плавающей точкой, в противном случае ваши расчеты могут в конечном итоге целое число, которое не будет работать хорошо, в противном случае все, кажется, хорошо.

Также я предлагаю для этого единичный тест или два. Если вы пройдете в 0, 90, 180 и 260, вы должны получить четные цифры (+/- 20,0 или 0,20). Это поможет вам настроить его и позволить вам поверить в результаты.

- Редактировать - Написал отличную версию вашей программы, потому что я не узнаю много вашего кода. Обнаружена проблема с радом и радами (упомянуто в комментариях). Вот отличный вариант вашего алгоритма:

float degrees=0.0 
float rads = degrees * (Math.PI/180.0); 
float x = 20.0 * Math.cos(rads); 
float y = 20.0 * Math.sin(rads); 
degrees = degrees + 1 
println x 
println y 

Это работает. Что я имел в виду под единичным тестом, так это то, что вы можете настроить что-то, что вызывает ваш метод со степенью «0.0», и убедитесь, что на выходе есть x из 20.0 и у 0.0, затем назовите его 90, и вы должны получить 0,20 (на самом деле вы можете получить небольшую ошибку с плавающей запятой, просто проверьте, чтобы x был меньше .001 или что-то в этом роде)

Если вы используете одобренную Google инфраструктуру для разработки этих приложений, я на 100% уверен, что некоторые будут «Официальный» способ проведения модульного тестирования, я настоятельно рекомендую вам изучить его, особенно с динамическими языковыми модульными тестами, которые могут быть абсолютно критическими.

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

Большинство людей, работающих на динамических языках, считают модульные тесты абсолютными требованиями, и даже в статически типизированных языках они очень важны, поскольку ваш проект выходит за пределы тривиального размера.

+0

Хм, мне все-таки что-то не хватает, я изменил 20 на 20,0 и 180 на 180,0, однако я все еще не вижу движения, когда я его запускаю. По модульному тесту вы имеете в виду попытаться получить его выходные числа вместо того, чтобы сообщать объект, куда идти? Я не уверен, что знаю, что такое единичный тест. Я также оставил часть, в которой я устанавливал градусы = 100, но я предположил, что это было именно там, где оно начиналось в круге. Не могли бы вы посмотреть и посмотреть, не могу ли я что-нибудь изменить, если я просто что-то упустил. Спасибо, Джеймс. –

+0

@ James - самый простой способ сделать единичный тест - просто добавить метод main() для каждого класса, который проверяет этот класс. Просто передайте цифры и посмотрите, соответствуют ли они тому, что вы ожидаете. Боюсь, я точно не знаю, что происходит, «местные рады» - это не тот тип, с которым я знаком, он должен быть эквивалентен float/double, а не int/long. Я сделаю быструю проверку на Java и переведу несколько вещей и опубликую свои результаты. –

+0

@James Одна проблема, знаете ли вы, что вы сказали «местные рады», а позже вы используете «рад». Динамические языки часто имеют один ОГРОМНЫЙ недостаток, заключающийся в том, что они создают переменные «на лету» молча, если вы их не заметите. В противном случае ваш алгоритм звучит, я получил достоверные результаты. –

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