C# анимация, помогите
Всем привет, хотел сделать анимацию шарика, шарик движется на право когда шарик достигает правого края формы, то он должен двигаться налево,
стоит проверка если не достигает тогда _x += 10 если достигает тогда -x -=10. Но тогда его начинает заклинивать. ???
namespace WindowsFormsApplicationBall3
{
public partial class Form1 : Form
{
private int _x;
private int _y;
public Form1()
{
InitializeComponent();
_x = 20;
_y = 20;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
// e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.FillEllipse(Brushes.GreenYellow, _x, _y, 50, 50);
}
private void timer1_Tick(object sender, EventArgs e)
{
// _x += 10;
// _y += 0;
if (_x != 400)
{
_x += 10;
_y += 0;
}
else
{
_x -= 10;
_y += 0;
}
Invalidate();
}
}
}
Первое, чтобы Я сделал с кодом - вынес бы все используемые константы из функций.
Второе, добавил бы переменную Направление
Третье, написал бы две функции проверки условий - ДостигЛевогоКрая и ДостигПравогоКрая (если будет нужно - ...Верха и ...Низа)
Четвертое, не пересчитывал координаты по результатам проверки, а пересчитывал величину шага, координаты всегда пересчитаются в конце и одинаково х += шагХ; у += шагУ;
пиздануть что-нибудь такое - проще простого. вопрос был "как исправить", я предложил с намиеньшими изменениями. а вы где были с предложениями "прекрасного кода", когда писали ваш первый пост? конечно, проще посоветовать "учиться, учиться, учиться!". хотите предложить ваш вариант - милости просим! только с предложениями конкретными "по существу заданных вопросов", а не что-нибудь с ваших заоблаков.
Ну, например такой код не сильно индусский. Короче и без повторений.
left_limit = 20; right_limit = 400; ball_x = 20; ball_y = 20; // Как будто мяч только что прилетел справа и ударился в левую стенку, координата мяча = левой стене speed_x = -10; while(...){ if(ball_x<=left_limit || ball_x>=right_limit){ // Стукнулись в стену - поменяли направление скорости (с -10 на 10 или наоборот) speed_x = -speed_x; } ball_x = ball_x + speed_x; }
такой код
-----
Нее, не то...
Полную постановку задачи пока не показали, но в исходном коде есть упоминания об У.
Так что получается 4-ре комплексных выражения проверки, но лучше оформить в функции,
две из которых элементарно возвращают Фалсе...
speed_x = -speed_x;
-----
Тоже не Ах...
Учитывая - У - изменение координат не будет просто изменением знака.
Так что - еще пара функций... даже если сейчас функция будет вырожденной до изменения
знака.
Делал как-то что-то похожее... только координат было немного больше двух.
Сидел, пыхтел... матюклался... и нефига не выходило...
Не выходило до тех пор, пока не отделил логику проверки от вычисления условий...
П.С. ТС точно не нужен готовый код - либо сам допрет, либо не его работа...