Страница: 1 | 2 |
Вопрос: Странное поведение VB6
Добавлено: 06.09.04 16:55
Автор вопроса: Yeputons | ICQ: 278444762
Hi! Я делаю игру Emeker Cat. Я хочу чтобы кошка "шла". Фазы движения нарисовал. Написл код, запустил и - стоп! Кошка не пошла а "поплыла" по экрану. Запустил пошаговою отладку - кошка пошла. Запустил - поплыла. Че делать. Вот код:
Option Explicit
Dim CatMove As Byte
Dim CatFrame As Byte
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyRight: CatMove = 2: CatFrame = 1
Case vbKeyLeft: CatMove = 1: CatFrame = 1
End Select
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyRight Or KeyCode = vbKeyLeft Then CatMove = 0
End Sub
Private Sub tmrMove_Timer()
If picCat.Left <= 0 And CatMove = 1 Then CatMove = 0
If picCat.Left >= (Me.ScaleWidth - picCat.Width) And CatMove = 2 Then CatMove = 0
Select Case CatMove
Case 1
If CatFrame = 1 Then picCat.Picture = picCatMove(0).Picture
If CatFrame = 2 Then picCat.Picture = picCatMove(1).Picture
If CatFrame = 3 Then picCat.Picture = picCatMove(0).Picture
If CatFrame = 4 Then picCat.Picture = picCatMove(2).Picture
picCat.Left = picCat.Left - 10
CatFrame = CatFrame + 1
If CatFrame = 5 Then CatFrame = 1
Case 2
If CatFrame = 1 Then picCat.Picture = picCatMove(3).Picture
If CatFrame = 2 Then picCat.Picture = picCatMove(4).Picture
If CatFrame = 3 Then picCat.Picture = picCatMove(3).Picture
If CatFrame = 4 Then picCat.Picture = picCatMove(5).Picture
picCat.Left = picCat.Left + 10
CatFrame = CatFrame + 1
If CatFrame = 5 Then CatFrame = 1
End Select
End Sub
Интервал таймера tmrMove - 10.
Ответы
Всего ответов: 18
Номер ответа: 1
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #1
Добавлено: 06.09.04 17:27
А вот такой шутник наш великий VB6!!! ))
Номер ответа: 2
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #2
Добавлено: 06.09.04 18:11
А избежать или исправить это можно? А то не очень "вкусно" получается.
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 06.09.04 19:48
Ну можно попробовать поэкспериментировать с обновлением окошка... Если хочешь, пришли мне на мыло пример... Если успеешь сегодня, то посмотрю сегодня, а нет, так до завтрашнего вечера
Номер ответа: 4
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #4
Добавлено: 06.09.04 22:20
С интервалом таймера я уже эксперементировал. С операторами Me.Refresh и DoEvents тоже. Ничего не вышло.
Номер ответа: 5
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #5
Добавлено: 06.09.04 23:05
Да, всегда я говороли – графические игрушки надо делать в DirectDraw. Все будет без проблем. Если заинтересовало, могу выслать движок.
А насчет твоего кода... А плывет она у тебя на какой картинке?
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 06.09.04 23:22
Говорю же выложи исходник, и все будет... Я никому недоверяю так как себе Ведь правду же говорят что лучше один раз увидеть и убедиться самому, чем сто раз услышать с чужих слов
Номер ответа: 7
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #7
Добавлено: 07.09.04 11:56
Плывет она у меня либо на кртинке picCatMove(0).Picture либо на picCatMove(3).Picture, В зависимости от направления движения. А что такое DirectDraw?
Sne, я выложил исходних в вопросе, что тебе еще надо?
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 07.09.04 12:14
Картинки, св-ва контролов... Ну не хочешь, как хочешь, мне что-ль надо...
Номер ответа: 9
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #9
Добавлено: 07.09.04 14:18
Sne, проверь почту.
Номер ответа: 10
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #10
Добавлено: 07.09.04 19:36
Проверил, веришь или нет, но у меня кот бегает довольно шустро, и кажется все нормально... А что ты подразумеваешь под словом "плыть" ?
По-моему она нормально бегает
Номер ответа: 11
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #11
Добавлено: 07.09.04 19:39
Под словом "плыть" я подразумеваю. То что кот "идет" по экрану застыв в одной фазе. А насчет того что у тебя кот бегает... Хм... Может мне VB переустановить?
Номер ответа: 12
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #12
Добавлено: 07.09.04 20:00
Переустановил я VB. Не помогло.
Номер ответа: 13
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #13
Добавлено: 10.09.04 16:52
Отсылай всех, у кого такой-же глюк на просмотр работоспособного кода к sne
Номер ответа: 14
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #14
Добавлено: 10.09.04 17:32
) ко мне, за что такое наказание, ааа нееет ))
А вообще, могу даже с экрана видео снять... все отлично бегает, правдо с такой скоростью передвижения лап, или что там у него, что их практически невидать... Может ты имел ввиду именно это...
Сейчас еще поэкспериментирую...
ЗЫ
Кстати у кого не будет работать, можно отослать по этой ссылке
http://www.lleo.aha.ru/na/
ЗЗЫ
Самим лучше по линку не ходить... я никого туда не отсылаю )
Номер ответа: 15
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #15
Добавлено: 10.09.04 17:54
Вот чуть подправил 2 строчки, и все стало бегать:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If CatFrame = 0& Then CatFrame = vbNull
Select Case KeyCode
Case Is = vbKeyRight: CatMove = 2
Case Is = vbKeyLeft: CatMove = 1
End Select
End Sub