Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 12

Как убрать мерцание картинки во время её движения?

04.06.2017, 14:44. Показов 5231. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как убрать мерцание картинки во время её движения? Я уже пробовал и LockDrawing и LockDrawingObjects - ничего не помогает. Эта картинка как будто не одновременно перерисовывается, сначала верхняя часть, потом середина ,потом нижняя часть, ещё и моргает в это время. В этой программе картинка с именем 'kart.png' должна перемещаться туда, куда нажимаешь правой кнопкой мыши.
Pascal
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
uses GraphABC, ABCObjects, Timers;
var kart: PictureABC;
var xm,ym,x,y,x1,y1,x3,y3: integer;
var Dw,del,x2,y2:real;
procedure M(xmm,ymm,pl:integer);
begin
if pl=2 then
  begin
  xm:=xmm;
  ym:=ymm;
  repeat
  x1:=xm-x;
  y1:=ym-y;
  Dw:=sqrt(sqr(xm-x)+sqr(ym-y));
  del:=Dw/5;
  x2:=x1/del;
  y2:=y1/del;
  x3:=Round(x2);
  y3:=Round(y2);
  kart.MoveOn(x3,y3);
  x:=x+x3;
  y:=y+y3;
  sleep(10);
  until dira.PtInside(xm+1,ym+1); 
  end;
end;
begin
MaximizeWindow;
x:=1000;
y:=400;
OnMouseDown:=M;
kart:=PictureABC.Create(1000,400,'kart.png');
end.
Я думал что в модуле ABCObjects мерцание автоматически убирается, в чём проблема? И как её исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2017, 14:44
Ответы с готовыми решениями:

Мерцание объектов во время движения
Добрый день! Проблема: во время перерисовки экрана я вижу как сторона объекта вдоль которой движется он на границе мерцает. ...

как убрать мерцание
посоветуйте пожалуйста как убрать мерцание изображения при рисовании подвижного графика структура такая цикл по времени ...

Как убрать мерцание
Всем привет! Написал програму с простой анимацией движения шариков и прямоугольника, все хорошо работает, но очень сильно раздражает...

3
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,877
Записей в блоге: 12
04.06.2017, 15:00
Использовать пару LockDrawing/Redraw (в хелпе PascalABC.NET есть пример их использования)

А твой код в принципе не компилируется (переменная dira какая-то неописанная), да еще и непонятно, что и где должно появляться. После корректировки (убрал на фиг условие, поставил вечный цикл) - нарисован какой-то человечек, картинка вообще не появляется, про перемещение я даже не упоминаю. Так что ничего и не мерцает...
0
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 12
05.06.2017, 09:07  [ТС]
Ой, я забыл, там вместо "dira" должно быть написано "kart".
А LockDrawing/Redraw я уже пробовал - не помогает, всё только хуже становиться. Условие тут нужно, чтобы картинка остановилась, когда дойдёт до точки по которой кликнул правой кнопкой мыши.

Добавлено через 14 минут
Я случайно нашёл проблему)) Она была в модуле ABCSprites. Я его подключил, но нигде не использовал. Почему-то когда он подключён, картинка мерцает, уберу его -всё нормально. Ничего не понимаю, как он влияет на мерцание. В данной программе его можно просто убрать, но я потом хотел заменить обычную картинку на спрайт, придётся снова подключить модуль ABCSprites, и снова начнётся мерцание.

( я, когда копировал код для вопроса, его подкорректировал и убрал этот модуль, на самом деле у меня в первой строке написано: "uses GraphABC, ABCObjects, ABCSprites, Timers;")
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
05.06.2017, 09:20
Pascal
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
uses GraphABC;
const steps = 10;
var kart: Picture;
x,y:integer;
procedure M(xm,ym,pl:integer);
begin
  var (dx,dy,step) := ((xm-x)/steps, (ym-y)/steps, 0);
  if pl=2 then
    repeat
      step += 1;
      (x,y) := (round(x+dx),round(y+dy));
      Window.Clear;
      kart.Draw(x,y);
      Redraw;
      Sleep(10);
    until step = steps; 
end;
begin
MaximizeWindow;
x:=Window.Width div 2;
y:=Window.Height div 2;
kart:= New Picture('32x32.bmp');
kart.Draw(x,y);
LockDrawing;
OnMouseDown:=M;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2017, 09:20
Помогаю со студенческими работами здесь

Как убрать мерцание ?
Использую команду Form1.Repaint для перерисовки изображения,но при движении объекта экран мерцает.Всё делаю в таймере,можно как-то убрать...

Эффект воды. Как убрать мерцание ?
WaterEffect.pas unit WaterEffect; interface uses Winapi.Windows, System.SysUtils, Vcl.Graphics, Math; const ...

Текстовое поле - как убрать мерцание?
Написал небольшой код, который делает стандартное текстовое поле с прозрачностью. Суть в том что я просто перерисовываю само текстовое...

Как убрать мерцание для графического объекта?
Использую этот цикл. Мерцает. repeat Window.Clear(clblack); LockDrawing; X := System.Windows.Forms.Cursor.Position.X; ...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru