|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
||||||||||||||||
Игра блоки12.08.2015, 16:20. Показов 3313. Ответов 16
Метки нет (Все метки)
Пишу игру блоки, разрабатывал на пикчербоксе, но решил перенести отрисовку на форму. Но тут начались проблемы (ранее напрямую на форме не рисовал никогда).
По сути рисовать нужно только блоки.
Перерисовка в таймере - дает моргающую картинку. Двойной буфер - включен.
1. Рисовать на форме, как я понял, получится только методом OnPaint и событием Form1_Paint? 2. Почему пропадает изображение? Мне ведь не нужно каждый ход таймера перерисовывать, только когда блоки удаляются. Спасибо, полный код программы внизу. Кликните здесь для просмотра всего текста
0
|
||||||||||||||||
| 12.08.2015, 16:20 | |
|
Ответы с готовыми решениями:
16
Игра Блоки Игра : блоки (уничтожение по цвету) Игра блоки(подобие тетриса) |
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|
| 13.08.2015, 01:08 [ТС] | |
|
Sanya_sa, спасибо, а можно пару комментариев?
Заменил в своем проекте событие Form1_Paint на OnPaint, убрал таймер, но изображение все равно пропадает, у вас нет, что я упускаю?
0
|
|
|
|
|
| 13.08.2015, 07:48 | |
|
Да вроде все понятно. Просто переопределяем OnPaint и делаем в нем свои отрисовки. Вот тут довольно понятно описано http://wm-help.net/lib/b/book/656723049/188 например.
0
|
|
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
||||||
| 13.08.2015, 08:53 [ТС] | ||||||
|
Разобрался, вся проблема была в этой строке
0
|
||||||
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|||||||||||
| 18.08.2015, 21:38 [ТС] | |||||||||||
|
Господа, как лучше отслеживать блок по которому кликаю?
Делал тотальным перебором:
Есть варианты ускорить первоначальную процедуру?
0
|
|||||||||||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
||||||
| 18.08.2015, 22:12 | ||||||
|
Рядовой, если вы прям на форме рисуете то скорее всего только перебор. Но не обязательно перебирать все фигуры. С ходу пока не могу придумать оптимальный алгоритм, но явно если кликнули в верхнюю половину формы, то нет смысла проверять блоки лежащие в нижней половине формы.
Впрочем если у вас там не 100500 блоков, то одноразовый поиск по клику едва ли будет существенно тормозить. Лучше замерьте реальное затрачиваемое время. Добавлено через 11 минут Кстати тотальный перебор у вас очень странный. Зачем каждый пиксель перебирать, когда можно проверять находится ли точка клика внутри блока. Вот такой код у меня работает.
1
|
||||||
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
||||||
| 18.08.2015, 22:17 [ТС] | ||||||
|
Блин, так всегда, весь день голову ломал а тут написал на форум и просветление))
Если разделить координаты клика на сторону квадрата и отбросить остаток получу координаты блока, а если рассчитывать в int даже не придется откидывать остаток:
tarasalk, о! еще один вариант, гораздо лучше первоначального)
0
|
||||||
|
|
||||||||||||
| 19.08.2015, 09:49 | ||||||||||||
Добавлено через 11 часов 5 минут К стати можно и сразу непосредственно блок получить
1
|
||||||||||||
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|
| 19.08.2015, 22:00 [ТС] | |
|
Более менее закончил игру, насколько мог, оптимизировал. Играть можно, но есть несколько проблем:
1. У чеклистбокса нет цвета трансперент? 2. Как сделать чтобы в чекбоксе не выделялся выбранный компонент голубым? на черном плохо смотрится 3. Сделал фон, всего 120 кб, но притормаживает выезд новых блоков при частых кликах, на белом фоне - без тормозов. Если скачаете - будет видно. Может у меня сама видеокарта тормозит? встроенная на 64мб, а там обновление изображение каждые 4мс, чтобы глаз не замечал.
1
|
|
|
|
||||||
| 20.08.2015, 09:44 | ||||||
|
рекомендации:
1) Image sprt = (Bitmap)Image.FromFile("C:\\b.png"); Вот это "C:\\b.png" - плохо, например у меня этого файла нет). Я бы сохранил все в ресурсы (см мой блог "Мяч"). Со звуком по ходу та же проблема. по Вашим вопросам 1) У чеклистбокса нет цвета трансперент? - не знаю не пользовался им), но у обычного чека(СheckBox) точно есть. 2) Как сделать чтобы в чекбоксе не выделялся выбранный компонент голубым? на черном плохо смотрится. С лёту не скажу, но опять же СheckBox Вам в помощь. В таких случаяи если не устраивают стандартные контролы лучше свой сделать и заточить его под свои задачи. 3) Сделал фон, всего 120 кб, но притормаживает выезд новых блоков при частых кликах, на белом фоне - без тормозов. Если скачаете - будет видно. Может у меня сама видеокарта тормозит? встроенная на 64мб, а там обновление изображение каждые 4мс, чтобы глаз не замечал. а) GDI+ видеокарта вторична б) человеческий глаз различает 25 кадров в секунду, от сюда вывод более частые отрисовки смысла делать нет, я так думаю, Вы просто проц загружаете, а глазу всё равно 1000 кадров в секунду пролетело или 25 . в) посмотрите мой блог "Мяч" там вариант задания скорости (скорости перемещения обьектов и отрисовки - разное) Удачи PS мне Ваша игра нравится ) Добавлено через 5 минут снять выделение
1
|
||||||
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|
| 20.08.2015, 13:32 [ТС] | |
|
Sanya_sa, черт, я совсем забыл про ресурсы, ссори
![]() По вашему совету заменил листбокс на простой чекбокс - проблем как не бывало, спасибо) На счет фона: посчитал - частота обновления картинки глаза - 41 с мелочью мс. Выставил такой шаг таймера - но увы, тормоза остались, у вас тоже? Таймер с ресурсами прикрепил (звук просто ужас )
0
|
|
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
||
| 20.08.2015, 13:47 [ТС] | ||
0
|
||
|
|
||||||
| 20.08.2015, 17:37 | ||||||
Сообщение было отмечено Рядовой как решение
Решение
В двух таймерах вызывается Invalidate(). Попробуйте убрать из TimerExp. Но у меня не тормозит и с двумя.
Добавлено через 8 минут Да и при клике тоже Invalidate(). Думаю слиш комного Invalidate() их ![]() 1) При клике - Invalidate() движение новых блоков + Invalidate() клика + Invalidate()TimerExp 2) Интервал TimerExp не имеет смысла делать меньше 40 Добавлено через 1 минуту
Добавлено через 8 минут label1.Text = "Score: " + Score; Вот эта штука постоянно в таймите тарахти - не айс)
0
|
||||||
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|
| 21.08.2015, 01:47 [ТС] | |
|
Sanya_sa, отличная идея совместить таймеры)
да, так не тормозит, но тест производителности показал что при частых кликах проц серьезно грузится) Печально думать что такой простой код так его грузит) Все понравилось кроме обновления лейбла) уж он то точно тут не причем) это все рекурсивные поиски схожих блоков..
0
|
|
| 21.08.2015, 01:47 | |
|
Помогаю со студенческими работами здесь
17
Разбить строку на блоки, а затем эти блоки на отдельные слова Пакетированные стандартные блоки - Вложенные стандартные блоки Бюджет 4500 гр. Конфигурация работа в Office, AutoCAD, игра Assassin, онлайн игра World of Tanks Игра в загадки. Загадать загадку. Если ответ верен – поздравить пользователя. Затем сообщить, что игра окончена. Игра в «Одиннадцать предметов», игра Баше. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|