|
2D-программирование Вопросы, касающиеся двумерного программирования |
05.01.2007, 23:19
|
#1
|
Бывалый
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений (для 257 пользователей)
|
Удаление
Я сталкнулся с такой проблемой. У меня здаровье игрока представлены 8-ю картинками(Полосками).
Как при нажатии какой либо кнопки удалять по очереди картинки, а потом также их рисовать.
|
(Offline)
|
|
05.01.2007, 23:34
|
#2
|
|
Re: Удаление
просто циклом
рисуй те что тебе нужны в данный момент (в данный кадр)
|
|
|
06.01.2007, 00:25
|
#3
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Удаление
Нужна переменная, которая хранит количество отображаемых на экране полосок. При нажатии кнопки уменшается значение переменной. Если она равна нулю, присвоить ей максимальное значение.
А в главном цикле цикл:
for i = 0 to kolichestvo_polosok_na_ekrane
Внутри него рисуется одна полоска со смещением по x, зависящем от i. Если, например, полоска имеет ширину 5 пикселов, то код может быть таким:
for i = 0 to kolichestvo_polosok_na_ekrane
drawimage poloska, x + i*7, y
next
В этом случае расстояние между полосками составит 7 - 5 = 2 пиксела.
|
(Offline)
|
|
06.01.2007, 01:56
|
#4
|
Бывалый
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений (для 257 пользователей)
|
Re: Удаление
Нет. Вы не поняли. Что создать переменную i эт понятно. Вопрос звучит так: Как рисовать и стирать изображения. Вот вам картинка. Там понятней будет показать что я хочю узнать.
|
(Offline)
|
|
06.01.2007, 02:13
|
#5
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Удаление
решение 1:
через буффер
copyrect
writepixel
тебе помогут
решение 2:
несколько кадров той панельки, один кадлр на один возможный вариант изображения. потом просто менять кадр.
|
(Offline)
|
|
06.01.2007, 02:21
|
#6
|
Бывалый
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений (для 257 пользователей)
|
Re: Удаление
А можно пример первого варианта. Я про втрой тоже думал, но мудится с фреймами как то лень.
|
(Offline)
|
|
06.01.2007, 02:33
|
#7
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Удаление
пишу в браузере так-что х.з.
во первых есть 5 полосок, или скока там, напримекр
Global pls[5]
главная картинка на которой надо рисовать
global mainpict
предположим все они 100 на 20 пикселей, черный цвет-прозрачный.
вот функция которая будет рисовать на картинке одну полосу.
нужна кстати будет еще пустая полоса.
в качестве src передается та картинка КОТОРУЮ нужно нарисовать.
function CopyFastEx(src,x,y)
buff=imagebuffer(src)
sbuff=imagebuffer(mainpict)
w=imagewidth(sbuff)
h=imageheight(sbuff)
lockbuffer buff
lockbuffer sbuff
for i=1 to 100
for j=1 to 20
if i+x>0 and i+x<w and j+y>0 and j+y<h
c=readpixelfast(buff,i,j)
if c<>0
writepixelfast(sbuff,i,j,c)
endif
endif
next
next
unlockbuffer buff
unlockbuffer sbuff
end function
дальше думаю догадаешся.
да, это будет работать довольно медленно, но она использоваться часто похоже и не должна.
если будет вылетать попробуй заменить read/write pixelfast на просто read/write pixel и убрать все блокировки.
|
(Offline)
|
|
06.01.2007, 02:38
|
#8
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Удаление
Мне кажется, проще сделать маску нужной формы, а под ней рисовать прямоугольные полоски. В данном случае в роли маски выступает сама панелька, места, где будут полоски, прозрачными сделать - только и делов.
|
(Offline)
|
|
09.01.2007, 00:46
|
#9
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Удаление
У тебя должна быть, основная картинка и картинки, с полосками, 8 штук. и просто отрисовываешь определённую, исходя из переменной.
У тебя должны они быть отдельно.
|
(Offline)
|
|
05.04.2007, 16:33
|
#10
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Re: Удаление
А как тебе такой вариант вместо полосок сектора. Ну допустим сначала полоска из 5 секторов зеленого цвета потом, допустим при повреждении игрока, крайняя правая полоска становится желтого цвета потом красного потом черного все. переход на след зел полоску и так далее. Я делал так. Надо-то всего нарисовать зел сектор жел и красн. А выглядит прилично.
|
(Offline)
|
|
06.04.2007, 02:44
|
#11
|
AnyKey`щик
Регистрация: 29.03.2007
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Удаление
Народ , что вы паритесь , надо просто нарисовать одну полоску можно разноцветную(если здоровье приближается к критическому) и загрузить ее ка анимированный рисунок
допустим рисунок 100x20
LifeLine=LoadAnimImage("LifeLine.png",2,20,50,0)
т.е. вы буквально делите рисунок на кадры(длиной 2 пиксела) , а потом отображаете сколько нужно фрэймов(кадров) и все.
|
(Offline)
|
|
25.04.2007, 22:48
|
#12
|
Бывалый
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений (для 257 пользователей)
|
Re: Удаление
При нажатии создаёься пуля и летит по напровлению. Циклом я создаю астероиды. А как их столкнуть? Как произвести коллизию двух обьектов, которые создаются в разное время из типа.
Function asteroids()
For as1= 1 To 5
aster_1.aster_1= New aster_1
aster_1\x#=Rnd(10,790)
aster_1\y#=Rnd(-100,0)
aster_1\xv#=Rnd#(-0.1,0.1)
aster_1\yv#=Rnd#(0.3,0.5)
aster_1\frame=fr
aster_1\trueplama=0
aster_1\frex#=0
aster_1\frexp=0
Next
End Function
;=============================================
deletpula =0
aviacia_s()
ka=3
;_________________________________________________
Repeat
Cls()
timeractive = 1
If KeyHit(56) asteroids()
;######################
If fremeAsteroids>15 Then remeAsteroids=0
remeAsteroids=remeAsteroids+0.2
fr=remeAsteroids
For aster_1.aster_1 = Each aster_1
Else If ImagesCollide (asteroid1, aster_1\x, aster_1\y, aster_1\frame, pulaimage, pula\xp, pula\yp,pula\frame)
aster_1\trueplama=1
DrawImage(boomimage,aster_1\x,aster_1\y,fr)
If fr> 14
Delete aster_1
EndIf
Else If aster_1\y>=500
Delete aster_1
Else
If aster_1\trueplama=0
aster_1\y=aster_1\y+aster_1\yv
aster_1\x=aster_1\x+aster_1\xv
DrawImage (asteroid1,aster_1\x,aster_1\y,fr)
EndIf
If aster_1\trueplama=1
DrawImage(boomimage,aster_1\x,aster_1\y,fr)
If fr> 14
Delete aster_1
EndIf
EndIf
EndIf
Next
;Выстрел из турелей
If deletpula =0
If MouseDown(1)
deletpula =9
PlaySound shotturel
For id=0 To 2
pula.pula=New pula
pula\xp=av_s\xs
pula\yp=av_s\ys
pula\frame= 3
pula\ide= id
next
EndIf
EndIf
For pula.pula = Each pula
pula\yp=pula\yp+vy
pula\xp=pula\xp+vx
If ImagesCollide (meh, 400, 150, 0,pulaimage, pula\xp, pula\yp,pula\frame)
PlaySound shottrue
Delete pula
deletpula =deletpula - id
ElseIf pula\yp <= 30
Delete pula
deletpula =deletpula - id
ElseIf pula\xp <= 0
Delete pula
deletpula =deletpula - id
ElseIf pula\xp >= 800
Delete pula
deletpula =deletpula - id
ElseIf kr=10
Delete pula
deletpula =deletpula - id
Else
DrawImage(pulaimage, pula\xp, pula\yp,pula\frame)
EndIf
Next
|
(Offline)
|
|
28.04.2007, 14:58
|
#13
|
Бывалый
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений (для 257 пользователей)
|
Re: Удаление
Так кто нить знает как сталкивать два обьекта, которые создаются в разное время из типов???? Очь надеюсь на вашу помощь...
|
(Offline)
|
|
29.04.2007, 01:21
|
#14
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Удаление
кого столкнуть? в какое разное время?
вот суть
for t1.type1=each type1
for t2.type2=each type2
if abs(t1\x-t2\x)<10 and abs(t1\y-t2\y)<10 then бла-бла-бла
next
next
тут перебираются два списка, и когда один элемент одного списка имеет приблизительные координыты какого-либо элемента второго списка, то происходит бла-бла-бла
|
(Offline)
|
|
01.05.2007, 15:41
|
#15
|
Бывалый
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений (для 257 пользователей)
|
Re: Удаление
Кароче, та же коллизия... В том то и проблема. Задаеём перебор первого цикла затем сразу же второго и получается взаимоисключающяя вещь. Если нет острероидов то не видно пули и наооборот. Нет пусль- невидно астероидов. Ладно. В связи с сложности моеё ситуации я выкладываю весь мой корявый код и медиа к нему. Может тогда кто чем сможет поможет....
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:34.
|