![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| rolandxl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Ответьте пожалуйста на такой вопрос : возможно ли коректно передвигать фигуры без использования таймера (с циклом for)? Просто проблема вот в чем, я создал цикл просчёта движения и отрисовки фигуры, на каждом шаге цикла в конце стоит функция Invalidate, однако фигура оставляет за собой шлейф, который пропадает только после завершения всего цикла. Как вариант хотел закрашивать прямоугольник с фигурой на каждом шаге фоновым фрагментом, но реализовать не удалось.
Кто знает помогите пожалуйста, а то курсовик скоро сдавать надо |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
rolandxl, при перетаскивании вообще не нужен таймер! Где ты его нашел в коде Experimenter-?
Таймер нужен если ты программируешь движение без участия человека (типа мультик). P.S. Но в любом случае тебе поможет выставить у формы DoubleBuffering = true |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
rolandxl, иногда помогает graphics.Clear(this.BackColor); перед новой прорисовкой
Это сообщение отредактировал(а) Experimenter - 27.11.2007, 15:08 -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
||||
|
||||
| rolandxl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Experimenter graphics.clear(backcolor) поможет только если фон одноцветный
|
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
rolandxl, что тебе сказать? тащи свой код.
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| rolandxl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) rolandxl - 27.11.2007, 21:42 |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
При первом взгляде на код создается впечатление, что он должен работать корректно, а шлейф возникает из-за того, что возможности системы не безграничны, слишком часто перерисовку делать приходится. Попробуй в начале цикла выставить
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| rolandxl |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
не, это моя личная инициатива сделать без таймера (слишком тяжело связать его с выполнением всей проги, когда 3 класса обмениваются между собой данными ). Насчёт
хорошая фишка, пригодиться для замедления анимации. Но мою проблему не решает: даже когда чел очень медленно идёт, всё равно обновления не происходит + через некоторое время прога падает на строчке
с сообщением Object reference not set to an instance of an object." видимо форма перестает быть активной |
||||
|
|||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
rolandxl, нарыл в МСДН:
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| rolandxl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Мне препод вот что предлагал: прежде чем рисовать человечка, копировать область фона, в которой мы хотим его рисовать, и после отрисовки закрывать ею его(вот как раз это у меня не получается сделать, обычный
Experimenter, что по этому поводу думешь? |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
rolandxl, препод хорошую идею подсказал, но как это осуществить технически? Щас почешем репу...
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Чесание репы привело к такому варианту:
Можно еще попробовать BufferedGraphics конечно, как здесь, отпиши, что вышло. Это сообщение отредактировал(а) Experimenter - 29.11.2007, 18:38 -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| rolandxl |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Всё класс, код нормально покатил, спасибо, моргания хоть и есть но уже не такие ощутимые как были у меня. В строчке
Из куба пробовал способ, но особо разбираться и экспериментировать времени не было. Вышло следующее: Все построения и просчеты происходят, но вывода графики нет. вот код
|
||||
|
|||||
| Experimenter |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |