Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/48: Рейтинг темы: голосов - 48, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 16.04.2010
Сообщений: 9
1

Плавное движение изображения за мышкой

16.04.2010, 19:49. Просмотров 9065. Ответов 14
Метки нет (Все метки)

не подскажите как заставить картинку двигаться за мышкой,не тупо двигалась под мышкой, а чтобы плавно "летела" за движение мышки.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2010, 19:49
Ответы с готовыми решениями:

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

Плавное движение вверх
Здравствуйте, есть картинка, как ссылка. Как сделать так, чтобы при наведении на нее мыши, она чуть...

Плавное движение картинки
Добрый день. Необходимо создать плавное прямолинейное движение Image в верхней части формы, так...

Плавное движение картинки
У меня есть цикл, в котором в зависимости от силы (определяется при помощи trackbar) картинка...

14
84 / 83 / 8
Регистрация: 03.11.2009
Сообщений: 723
16.04.2010, 20:15 2
Цитата Сообщение от aurum Посмотреть сообщение
не подскажите как заставить картинку двигаться за мышкой,не тупо двигалась под мышкой, а чтобы плавно "летела" за движение мышки.
все довольно просто , отлавливай координаты мыши по таймеру, и перемещай картинку в те координаты, тоже по таймеру)
0
1 / 1 / 0
Регистрация: 16.04.2010
Сообщений: 9
16.04.2010, 22:48  [ТС] 3
Цитата Сообщение от Sequd Посмотреть сообщение
все довольно просто , отлавливай координаты мыши по таймеру, и перемещай картинку в те координаты, тоже по таймеру)
мм а можно код, а то так как то не понятно

Добавлено через 1 час 19 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 public partial class Form2 : Form
    {
        public float x, y, x1, y1, x2, y2, x3, y3;
        Bitmap fly = new Bitmap(@"butterfly.gif");
        public Form2()
        {
            InitializeComponent();
        }
        
        private void Form2_MouseMove(object sender, MouseEventArgs e)
        {
            x = e.Location.X;
            y = e.Location.Y;
        }
        private void Form2_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(fly, x2 - fly.Size.Width / 2, y2 - fly.Size.Height / 2);
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            Invalidate();
            if (x2 < x && y2 < y)
            {
                x2 += (float)(x3 * 0.2);
                y2 += (float)(y3 * 0.2);
            }
            if (x2 > x && y2 < y)
            {
                x2 -= (float)(x3 * 0.2);
                y2 += (float)(y3 * 0.2);
            }
            if (x2 > x && y2 > y)
            {
                x2 -= (float)(x3 * 0.2);
                y2 -= (float)(y3 * 0.2);
            }
            if (x2 < x && y2 > y)
            {
                x2 += (float)(x3 * 0.2);
                y2 -= (float)(y3 * 0.2);
            }
        }
 
        private void Form2_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right) this.Close();
        }
 
        private void timer2_Tick(object sender, EventArgs e)
        {
            x3 = x;
            y3 = y;
        }
    }
вот как то так "в лоб" написал и то кривовато получается, не подскажите как полегче и по точнее сделать?
0
322 / 306 / 68
Регистрация: 05.11.2009
Сообщений: 712
17.04.2010, 13:27 4
движение изображения за курсором мыши
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    public partial class Form1 : Form
    {
        Image img;
        Point _point = new Point(0, 0);
 
        public Form1()
        {
            InitializeComponent();
            img = Bitmap.FromFile(Application.StartupPath + @"\star.png");
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            MoveImg(new Point(e.Location.X - img.Height / 2,
                              e.Location.Y - img.Width / 2));
 
            this.Invalidate();
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(img, _point);
        }
 
        private void MoveImg(Point point)
        {
            if (_point.X > point.X)
                _point.X -= 1;
            if (_point.X < point.X)
                _point.X += 1;
            if (_point.Y > point.Y)
                _point.Y -= 1;
            if (_point.Y < point.Y)
                _point.Y += 1;
        }
    }
0
1922 / 427 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
17.04.2010, 16:35 5
aurum, на самом деле нетривиальная задача. Дело в том, что курсор мыши не перемещается плавно, через равные интервалы. Перемещение мыши на экране зависит от того насколько резко двигает мышь пользователь. Если резко сдвинуть мышь слева на право (для примера), то курсор не будет проходить быстро все расстояние, а нарисуется сразу в конечном положении. Как должна двигаться ваша картинка в таком случае?
1
1 / 1 / 0
Регистрация: 16.04.2010
Сообщений: 9
17.04.2010, 17:21  [ТС] 6
ну короче мне надо смоделировать полет бабочки, надо чтобы бабочка летала за мышкой. вот в чем суть
0
1922 / 427 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
17.04.2010, 17:49 7
Полет бабочки необходимо реализовать в отдельном потоке. Например, можно установить таймер, который через секунду будет изменять положение бабочки и заставлять форму перерисовываться. Отрасовку также оставляем в обработчике Paint, но по координатам, которые будет рассчитывать наш таймер.
Способ расчета. Пусть наша бабочка летит с постоянной скоростью в один пиксел в любом направлении. По событию таймера. находим координаты мыши. Если Х координата мыши не равна текущей Х координате бабочки, то текущую координату увеличиваем/уменьшаем на 1. Аналогично с координатой Y.
0
322 / 306 / 68
Регистрация: 05.11.2009
Сообщений: 712
17.04.2010, 19:51 8
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace butterfly
{
    public partial class Form1 : Form
    {
        Image img;
        Point _point;
        Point _mousePoint = new Point();
        float _angle;
        Matrix X = new Matrix();
 
        public Form1()
        {
            InitializeComponent();
            img = Bitmap.FromFile(Application.StartupPath + @"\butterfly.png");
            _point = new Point(0, 0);
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            MoveImg(_mousePoint);
            this.Invalidate();
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            _mousePoint = new Point(e.Location.X - pictureBox1.Height / 2,
                                    e.Location.Y - pictureBox1.Width / 2);
        }
 
        private void MoveImg(Point point)
        {
            if (_point.X > point.X)
                _point.X -= 1;
            if (_point.X < point.X)
                _point.X += 1;
            if (_point.Y > point.Y)
                _point.Y -= 1;
            if (_point.Y < point.Y)
                _point.Y += 1;
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(img, _point);
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        } 
    }
}
таймер только не большой делайте, а то бабочка будет долго двигаться...
0
Изображения
 
1 / 1 / 0
Регистрация: 16.04.2010
Сообщений: 9
20.04.2010, 21:36  [ТС] 9
терь бы сделать саму анимацию бабочки не подскажите как ?
0
84 / 83 / 8
Регистрация: 03.11.2009
Сообщений: 723
21.04.2010, 00:48 10
Цитата Сообщение от aurum Посмотреть сообщение
терь бы сделать саму анимацию бабочки не подскажите как ?
смотря что требуется... можно сделать например что бы менялись кадры...
0
1 / 1 / 0
Регистрация: 16.04.2010
Сообщений: 9
21.04.2010, 17:13  [ТС] 11
ну мне надо чтобы бабочка меняла свое направление(тобишь в 8 направлениях) и махала крыльями, а через что я вообще не знаю(
0
84 / 83 / 8
Регистрация: 03.11.2009
Сообщений: 723
22.04.2010, 02:08 12
1 вариант: рисуй текстуры, и управляй кадрами
2 вариант: попробуй сделать через формат .gif, анимированые картинки
0
152 / 151 / 29
Регистрация: 21.05.2010
Сообщений: 338
02.08.2013, 11:05 13
Делаю подобную задачу. Сначала пробовал по Mouse_Move() в цикле писать передвижение, пока объект не доберётся до курсора. + Thread.Sleep() небольшой, чтобы не очень быстро летало. Всё клёво, но форма виснет. Сделал в BgWorker'е - форма тоже виснет ибо если просто в BgWorker закинуть - "PictureBox используется не в том потоке, в котором создан", а если использовать Invoke() - форма опять виснет на время передвижения.
Потом сделал в Timer'е. Всё летает клёво, но медленно довольно, несмотря на то, что интервал таймера поставил 1 мс.
Что делать? Как ускорить?
0
1049 / 856 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
02.08.2013, 11:12 14
Средствами GDI вряд ли лучше что-то выйдет. берите WPF - там уже DirectX и норм будет.
1
152 / 151 / 29
Регистрация: 21.05.2010
Сообщений: 338
02.08.2013, 11:35 15
Learx, попробую на WPF переписать - гляну.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2013, 11:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Плавное движение линии
делаю к примеру такой код var a=99; var b=1; function f() { while(a&gt;10) { s=0.01;...

Плавное движение объекта
Здравствуйте. Пытаюсь сделать плавное движение объекта и компилятор выдаёт ошибку. Что не так? ...

Плавное движение шайбы
Здравствуйте, у меня такой вопрос, я пишу на AS2 и хотелось бы узнать каким образом можно...

Плавное движение за скроллом
Привет, стоит задача, сделать элемент абсолютным, на любой стр. сайта, шар, и при скролле он должен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.