Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/46: Рейтинг темы: голосов - 46, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 26

Картинка которая двигается за курсором!

22.10.2013, 22:09. Показов 9479. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день , делал вот свою курсовую игру , игра типа " поймать все что падает " , и столкнулся с проблемой.
Когда курсор попадает на Image , он не видит координаты , то есть выходит так :
Delphi
1
2
3
4
5
procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
car.Left:=x;
end;
что мой "машина" останавливается , по скольку координаты нету , когда курсор над Image.
Но , если я нажимаю на пустом месте формы ЛКМ , и держу ее то "машина" двигается , даже если курсор находится на Image.
для ясности скину весь код игры которую я нашел в интернете .
Может кто знает , как сделать что бы моя "машина" двигалась за курсором по ОХ , при этом без рывков ?
Вложения
Тип файла: zip race.zip (31.4 Кб, 32 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.10.2013, 22:09
Ответы с готовыми решениями:

Lable не двигается вместе с курсором при перетаскивании его на Panel
Lable не двигается вместе с курсором при перетаскивании его на Panel. Проект прилагается.

Картинка не двигается
Привет,привет.Хм возникла проблемка с кодом: package Game; import java.awt.Color; import java.awt.Dimension; import...

Картинка не двигается влево
Помогите, пожалуйста разобраться, не пониманию, почему первая картинка не двигается влево. HTML: <div id="cats"> ...

53
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 26
23.10.2013, 01:45  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Lirrk Посмотреть сообщение
Ты вообще знаешь что такое массив и запись?
знаю я это
0
Заблокирован
23.10.2013, 01:56
Ну вот. сделай запись на блин и организуй в массив
В записи координаты. индекс картинки и статус есть или нет.
1
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 26
23.10.2013, 01:56  [ТС]
Цитата Сообщение от Lirrk Посмотреть сообщение
Значит нужно сначала чётко размеры определить

Добавлено через 1 минуту
я и говорю , скажем у вас ширина поля 16 клеток по 32 пикселя

Добавлено через 51 секунду
В любой из 16 клеток в самом верхнем ряду может появится тот или иной блин. как вы называете

Добавлено через 2 минуты
тут очень просто всё. сначала один попробуйте

Добавлено через 3 минуты
Ты вообще знаешь что такое массив и запись?
я просто ни когда не сталкивался с Битмап
0
Заблокирован
23.10.2013, 02:00
И на каждом шаге проверяй, как и где каждый блин

Добавлено через 38 секунд
так у тя ж код есть, логика там есть всё так же

Добавлено через 39 секунд
а в графике. тем более в играх. без битмапа делать нечего

Добавлено через 1 минуту
тебе это срочно?
Завтра я гляну что с твоим тем проектом делать можно

Добавлено через 27 секунд
в смысле сегодня, но позже
0
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 26
23.10.2013, 02:07  [ТС]
Цитата Сообщение от Lirrk Посмотреть сообщение
И на каждом шаге проверяй, как и где каждый блин

Добавлено через 38 секунд
так у тя ж код есть, логика там есть всё так же

Добавлено через 39 секунд
а в графике. тем более в играх. без битмапа делать нечего

Добавлено через 1 минуту
тебе это срочно?
Завтра я гляну что с твоим тем проектом делать можно

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

Добавлено через 3 минуты
Цитата Сообщение от Lirrk Посмотреть сообщение
И на каждом шаге проверяй, как и где каждый блин

Добавлено через 38 секунд
так у тя ж код есть, логика там есть всё так же

Добавлено через 39 секунд
а в графике. тем более в играх. без битмапа делать нечего

Добавлено через 1 минуту
тебе это срочно?
Завтра я гляну что с твоим тем проектом делать можно

Добавлено через 27 секунд
в смысле сегодня, но позже
Да не, мне то не сильно горит . Просто хочу все сделать во времмя, мне быть понять как сделать 1 падающий елемент с помощью битмапа, и понять его столкновения с курсором , а дальше я уже доделаю как надо.
Я пытался в старый код вставить . то что Вы мне написали, но там кучу проблем было, проще с нуля, к тому же у ImageList координат нет, по этому отследить положения "кекса" к ImageList , надо иным способом , чем просто сравнивать их по ОХ и ОУ

Добавлено через 50 секунд
Цитата Сообщение от Lirrk Посмотреть сообщение
И на каждом шаге проверяй, как и где каждый блин

Добавлено через 38 секунд
так у тя ж код есть, логика там есть всё так же

Добавлено через 39 секунд
а в графике. тем более в играх. без битмапа делать нечего

Добавлено через 1 минуту
тебе это срочно?
Завтра я гляну что с твоим тем проектом делать можно

Добавлено через 27 секунд
в смысле сегодня, но позже
В любом случае спасибо, буду ждать Вашего ответа !
0
Заблокирован
23.10.2013, 02:52
Для демонстрации падения... потом это будет немного изменено
две переменные нужны
X1,Y1:Integer;

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//
 B1.Canvas.Draw(0,0,B2);
 If X_-16 <= 0 then X_:= 16;
 if X_+16 >= B2.Width then X_:= B2.Width - 16;
 IL1.Draw(B1.Canvas,X_-16, B1.Height-32,0,True);
 IL1.Draw(B1.Canvas,X1, Y1,0,True);
 Y1:= Y1 + 2;
 P1.Invalidate;
end;
Вот и всё. вместо машинки вставьте другой индекс и будет падать другая картинка.

Что касается координат имиджлист. не путайте его с имиджим. Это только база хранения картинок. склад.

У всех картинок один размер.
В вашем случае 32 на 32
Я же написал вам. Обратите внимание на код, где машинка сталкивается с краем поля. Точно так определяется столкновения блина с машинкой. Ничего сложного.

Что касается картинки... Битмап работает только с BMP Можно и другие форматы, но не забивайте этим голову.
Скажем у вас есть картинка. и её надо загрузить в качестве фона в B2

Как у имиджа, как у формы, у битмапа есть Canvas
Пишем B2.Canvas.LoadFromFile(Имя файла);
Вот и всё. Картинка загружена, и теперь она постоянно будет в игре в качестве фона
1
Заблокирован
23.10.2013, 15:40
Сбёг... ну ладно
Вот начальный проект. Осталось в принципе совсем немного доделать.
Вложения
Тип файла: rar G001.rar (213.0 Кб, 8 просмотров)
1
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 26
23.10.2013, 20:00  [ТС]
Цитата Сообщение от Lirrk Посмотреть сообщение
Сбёг... ну ладно
Да не , я тут !
Сейчас сижу и розбираю ваш код.
Его можно сходу уже использовать , только оформить под себя, но...
мне бы понять как оно происходит .

Добавлено через 26 минут
Цитата Сообщение от Lirrk Посмотреть сообщение
Сбёг... ну ладно
Вот начальный проект. Осталось в принципе совсем немного доделать.
Пытаюсь сделать так что бы , у меня сталкивались машинка и спрайт .

Добавлено через 34 минуты
Цитата Сообщение от Lirrk Посмотреть сообщение
Сбёг... ну ладно
Вот начальный проект. Осталось в принципе совсем немного доделать.
Пытался взять код с прошлого проекта , для столкновения .
Переделал его под новый. Вроде вставляю в нужное место
Delphi
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
61
62
63
64
65
66
procedure TForm1.Timer1Timer(Sender: TObject);
var
  i:Word;
 
begin
//
 Randomize;
 label1.Caption:=floattostr(k);
 
 B1.Canvas.Draw(0,0,B2);
 
 If X_-16 <= 32 then X_:= 32+16;
 if X_+16 >= 32*16 then X_:= 32*16+16;
 
 //Спрайты
 for i:=0 to 50 do begin
 if  BL_[i].S then  begin //Спрайт существует - двигать
                     IL1.Draw(B1.Canvas, BL_[i].X*32+32, BL_[i].Y,BL_[i].i,True);
                     BL_[i].Y:= BL_[i].Y + 6; //Приращение движения
 
                     //Время жизни закончилось
                     if BL_[i].Y > 18*32 then
                      BL_[i].S:=False;
 
 
 // проверка столкновения 
 
                      if (BL_[i].Y+32)>(16*32) then  begin
   if (BL_[i].X+1<=X_-16) and (X_-16<=(BL_[i].X+32-1))
    then
        begin
        K:=K+10;
        BL_[i].S:=False;
        end;
     end;
 
 if (BL_[i].Y+32)>(16*32) then
 begin
   if (BL_[i].X+1<=(X_-16+32)) and ((X_-16+32)<=(BL_[i].X+32-1))
       then
           begin
           K:=K+10;
           BL_[i].S:=False;
           end;
 end ;
 end
 
  else
                          begin //Спрайта нет - создать
 
                           if Pause < 0 then begin
                           BL_[i].i:= Random(9)+4;
                           BL_[i].Y:= - 36;
                           BL_[i].X:= Random(16); //Задание позиции по горизонтали
                           BL_[i].S:= True; //Спрайт создан.
                           Pause:= 10;
                                             end;
                          end;
 
 
                  end;
 
                     IL1.Draw(B1.Canvas,X_-16, 16*32 ,3,True);
 Pause:= Pause - 1;
 P1.Invalidate;
end;
Но столкновения не происходит , и очки не считаются .
0
Заблокирован
23.10.2013, 20:44
не всё так просто. Во-первых Нужно ловить положение машины, а потом проверять спрайт, который вошёл в зону действия машины. Да сделаю я это. Тебе не совсем к спеху? Только мне не нравится этот садизм - фигурки давить.
Да и смысла в этом мало. Я сделал Числа. от -9 до +9.

У меня будет так. Плюсы надо ловить. от минусов убегать. Причём плюсы ловятся только спереди. Сбоку ограничивают движение. Минусы ловятся и спереди и сбоку . Кроме того числа могут менять минус на плюс, плюс на минус в полёте, или совсем исчезать. Ну это уже уровни.

Вообще, у меня массив записей. Каждая запись - спрайт. Их количество - это сколько их может быть на игровом поле зараз. Для этого нужно паузу вычислять, чтобы побольше спрайтов поместилось и при этом они бы не наезжали друг на друга.

и совет, не торопитесь с очками и столкновениями. Это самое простое, хотя запутанное дело.
В принципе можно и шоссе анимировать, чтоб был эффект движения.
Вы хоть поняли, откуда берётся это шоссе?
Вы с битмапами разберитесь, Посмотрите куда девается и откуда появляется курсор. Кстати, это как раз и есть ответ на ваш вопрос, как получать координаты экрана и вычислять координаты под компонентом.

А работа со спрайтами это потом. Как вы можете это понять если не можете разобраться с битмапом?
1
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 26
23.10.2013, 21:10  [ТС]
Цитата Сообщение от Lirrk Посмотреть сообщение
не всё так просто. Во-первых Нужно ловить положение машины, а потом проверять спрайт, который вошёл в зону действия машины. Да сделаю я это. Тебе не совсем к спеху? Только мне не нравится этот садизм - фигурки давить.
Да и смысла в этом мало. Я сделал Числа. от -9 до +9.

У меня будет так. Плюсы надо ловить. от минусов убегать. Причём плюсы ловятся только спереди. Сбоку ограничивают движение. Минусы ловятся и спереди и сбоку . Кроме того числа могут менять минус на плюс, плюс на минус в полёте, или совсем исчезать. Ну это уже уровни.

Вообще, у меня массив записей. Каждая запись - спрайт. Их количество - это сколько их может быть на игровом поле зараз. Для этого нужно паузу вычислять, чтобы побольше спрайтов поместилось и при этом они бы не наезжали друг на друга.

и совет, не торопитесь с очками и столкновениями. Это самое простое, хотя запутанное дело.
В принципе можно и шоссе анимировать, чтоб был эффект движения.
Вы хоть поняли, откуда берётся это шоссе?
Вы с битмапами разберитесь, Посмотрите куда девается и откуда появляется курсор. Кстати, это как раз и есть ответ на ваш вопрос, как получать координаты экрана и вычислять координаты под компонентом.

А работа со спрайтами это потом. Как вы можете это понять если не можете разобраться с битмапом?
Спасибо , как бы это моя курсовая , мне же ее защищать еще. Я почти разобрался с координатами для поимки . Как делается фон я понял , вы берете два масива, и в одной строке если "картинка" , 0 или 17 , мы ей присваиваем из имейдж лист траву , если нет то дорогу , и так заполняем все 24 строчки .

Идея игры которую я делаю , это ловить оценки , тоже самое что и ваши + и - , просто от 1 и 2 надо убегать , 3 , 4 , 5 ловим. Ну а фон , это лист тетрадки , что я как понял мне легко сделать, тоже самое шоссе , просто вместо асфальта у меня , кусок тетради , а вместо забора и травы - поля тетради .

Я могу как то с вами связаться не через форум ?
0
Заблокирован
23.10.2013, 21:16
через аську. Если у вас есть, давайте номер в личку. Только не сюда
1
Заблокирован
24.10.2013, 18:32
Можешь забирать
Вложения
Тип файла: rar G002.rar (228.9 Кб, 10 просмотров)
1
24.10.2013, 18:46

Не по теме:

Цитата Сообщение от Lirrk Посмотреть сообщение
Если хочешь научится писать настоящие игры, ты должен забыть про имиджи и рендомно.
чушь какая)) есть слово "имидж", и есть слово "рандомно", даже гугл переводчик их знает))
и как вообще скилл зависит от лексики?)

0
Заблокирован
28.10.2013, 22:41
Вот забирай
Вложения
Тип файла: rar Project1.rar (162.2 Кб, 14 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2013, 22:41

Картинка img не двигается
Здравствуйте!Я только учусь, поэтому строго попрошу не судить.Решил сделать слайдер на сайт. Нашел видео на youtube, где показывается, как...

Drag n drop рядом с курсором картинка
Как сделать чтобы при перетаскивании, вместо плюсика была своя картинка. Прикрепил изображения, (1) как сейчас, (2) как хотелось бы.

Как сделать кнопку которая рандомно двигается ?
Всем привет ) в чем суть, 1- мне нужно чтобы кнопка на форме двигалась сама по себе как ей вздумается, 2- нужно чтобы при активации...

Как вращать картинку в delphi, которая двигается командой Timer
Прошу помочь мне. Буду благодарен, за каждый ответ. Суть задачи такова, надо создать псевдо-анимацию, которая выполняется с помощью...

Плитка, которая передвигается курсором мыши
Не могу понять какой скрипт используется для сайта http://www.k2.pl/#!/en/awards/mode/tiles/ Благодаря этого скрипта, курсором мыши...


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

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru