![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
KljaGGsa |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Как практически с помощью функций WinAPI нарисовать мячик, который бы двигался горизонтально в прямоугольнике вправо-влево, "отскакивая" от боковых стенок, "пинг-понг" - ?
![]() Сообщение отредактировано: KljaGGsa - 6.07.2009 17:26 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Что именно вызывает затруднения? Рисуем шарик с помощью Ellipse, сам прямоугольник - Rectangle. Написать программу, которая будет проверять, не выходит ли шарик за пределы прямоугольника, и если выходит - изменить направление движения - не должно составить большой проблемы.
Начинай, если что непонятно - говори, что именно. |
KljaGGsa |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
В обычном пейнтбоксе и канвасе это действительно несложно, а вот как применить API сколько литературы не читаю, и бумажной и электронной, найти не могу . . . (((
Сообщение отредактировано: KljaGGsa - 6.07.2009 21:39 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Так тебе совсем WinAPI-шное приложение надо, без VCL? Ну, тогда так, к примеру:
program Project1; |
Client |
![]()
Сообщение
#5
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Это же не простой проект. Куда надо это скопировать?
Сообщение отредактировано: Client - 7.07.2009 14:25 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата Это же не простой проект. Куда надо это скопировать? ![]() |
Client |
![]()
Сообщение
#7
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата Это не простой, это простейший проект В смысле что там нету формы куда ложить кнопки, едиты....Эскизы прикрепленных изображений ![]() |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Это WinAPI. Какие кнопки? Какие эдиты? VCL не используется.
|
KljaGGsa |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
а я в полном шоке от этого кода, совершенно растерялась и вчера даже в эфир не вышла . . . Где взять справочный и учебный материал, который мог бы хоть поверхностно объяснить откуда здесь ноги растут???
![]() |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата Где взять справочный и учебный материал, который мог бы хоть поверхностно объяснить откуда здесь ноги растут??? Ну, начнем с самого начала. Ты знаешь, как Windows-приложение взаимодействует с ОСью? Про механизм сообщений слышала? |
KljaGGsa |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Нет, мне пока что это совсем незнакомо. Знаю только в первом приближении интерфейс оболочки Delphi7, основные свойства самых расхожих компонентов и простейшие алгоритмы их взаимодействия. Вот фрагмент вашего кода сразу бросился в глаза и удивил - какие-то сплошные сообщения, а не язык программирования:
![]() while (GetMessage(AMessage, 0, 0, 0)) do begin TranslateMessage(AMessage); DispatchMessage(AMessage); |
KljaGGsa |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Хм, но что-то цель не получилось достичь. Прямое обращение к функциям операционки по идее должно дать быструю и эффективную (плавную) работу, а шарик на экране движется явно не лучше, чем если бы я его нарисовала эллипсом в канвасе и закрашивала бы каждый раз при единичном перемещении. Дискретность и дрыганье - те же самые...
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата сразу бросился в глаза и удивил - какие-то сплошные сообщения, а не язык программирования: Вот именно это и есть основной цикл обработки сообщений. Перевожу на русский:пока (есть_сообщения_для_окна) P.S. А вот тут была? http://www.firststeps.ru/mfc/winapi/r.php?51 Там хоть и С рассматривается, но принцип работы Win-приложения прояснится... Добавлено через 1 мин. Цитата шарик на экране движется явно не лучше, чем если бы я его нарисовала эллипсом в канвасе и закрашивала бы каждый раз при единичном перемещении. Дискретность и дрыганье - те же самые... Тебе записать видео, или ты поверишь, что никакого дерганья я у себя не наблюдаю? И с чем оно связано - не знаю.Добавлено через 14 мин. Цитата шарик на экране движется явно не лучше, чем если бы я его нарисовала эллипсом в канвасе и закрашивала бы каждый раз при единичном перемещении. Кстати, вопрос на засыпку: с чего ты взяла, что на WinAPI должно быть ЛУЧШЕ? То же самое рисование на канвасе, то же самое перемещение (только не единичное, а 5-ти единичное, что может послужить причиной "дерганья", нет DoubleBuffered, что тоже не улучшает визуализацию). Ты меня извини, конечно, но писать здесь полный код, работающий идеально, я считаю нецелесообразным. По нескольким причинам. Главная из которых - если тебя ЭТО уже вводит в ступор, то я представляю, куда тебя введет более сложный код.Цитата что-то цель не получилось достичь Целью было написание приложения, перемещающего изображение мяча горизонтально, от одной стенки к другой. Про плавность перемещения и его идеальность речи не было. Если тебя это не устраивает - делай сама, больше мешать тебе своими постами не буду.Удачи. |
Client |
![]()
Сообщение
#14
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
По той ссылке код для Си а примерах, а те функции и на Delphi работают? И только для консольного приложения или для VCL тоже?
Сообщение отредактировано: Client - 8.07.2009 17:35 |
KljaGGsa |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Владимир, прямое обращение к функциям ОС меня заинтересовало потому что Вы здесь на форуме утверждали, что это принципиальная экономия тактов и загрузки процессора, а следовательно и увеличение быстродействия программы. Использовать WinAPI правильнее, чем пытаться оптимизировать алгоритмы в графических VCL. Теперь буду пытаться разобраться, на каком этапе возникает дискретность анимации. В моем варианте мячик пинг-понга движется с видимыми хотя и незначительными рывками примерно одинаково что в канвасе пейнтбокса, что в нарисованном Вами консольном поле. Процессор Core Duo Pro с соответствующей тактовой частотой, на который грех жаловаться, другие программы отключены, резидентно висит только самый необходимый минимум. И очень огорчаюсь, если Вас чем-то ненароком обидела ..
![]() Сообщение отредактировано: KljaGGsa - 8.07.2009 18:50 |
Unconnected |
![]()
Сообщение
#16
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Дерганье и правда присутствует, даже не дёрганье, а перемещение мячика как бы маленькими рывками. Это хорошо заметно, если поставить интервал таймера равным 500, например. Но для учебных целей этого более чем достаточно, по моему:) На WinAPI вроде бы программы ещё маленькие получаются...
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 10:00 |