forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Удаление (http://forum.boolean.name/showthread.php?t=2294)

Atomikc 05.01.2007 23:19

Удаление
 
Я сталкнулся с такой проблемой. У меня здаровье игрока представлены 8-ю картинками(Полосками).
Как при нажатии какой либо кнопки удалять по очереди картинки, а потом также их рисовать.

jimon 05.01.2007 23:34

Re: Удаление
 
просто циклом
рисуй те что тебе нужны в данный момент (в данный кадр)

alcoSHoLiK 06.01.2007 00:25

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 пиксела.

Atomikc 06.01.2007 01:56

Re: Удаление
 
Вложений: 2
Нет. Вы не поняли. Что создать переменную i эт понятно. Вопрос звучит так: Как рисовать и стирать изображения. Вот вам картинка. Там понятней будет показать что я хочю узнать.

HolyDel 06.01.2007 02:13

Re: Удаление
 
решение 1:
через буффер
copyrect
writepixel
тебе помогут
решение 2:
несколько кадров той панельки, один кадлр на один возможный вариант изображения. потом просто менять кадр.

Atomikc 06.01.2007 02:21

Re: Удаление
 
А можно пример первого варианта. Я про втрой тоже думал, но мудится с фреймами как то лень.

HolyDel 06.01.2007 02:33

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 и убрать все блокировки.

alcoSHoLiK 06.01.2007 02:38

Re: Удаление
 
Мне кажется, проще сделать маску нужной формы, а под ней рисовать прямоугольные полоски. В данном случае в роли маски выступает сама панелька, места, где будут полоски, прозрачными сделать - только и делов.

moka 09.01.2007 00:46

Re: Удаление
 
У тебя должна быть, основная картинка и картинки, с полосками, 8 штук. и просто отрисовываешь определённую, исходя из переменной.

У тебя должны они быть отдельно.

dimanche13 05.04.2007 16:33

Re: Удаление
 
А как тебе такой вариант вместо полосок сектора. Ну допустим сначала полоска из 5 секторов зеленого цвета потом, допустим при повреждении игрока, крайняя правая полоска становится желтого цвета потом красного потом черного все. переход на след зел полоску и так далее. Я делал так. Надо-то всего нарисовать зел сектор жел и красн. А выглядит прилично.

mike1983 06.04.2007 02:44

Re: Удаление
 
Народ , что вы паритесь , надо просто нарисовать одну полоску можно разноцветную(если здоровье приближается к критическому) и загрузить ее ка анимированный рисунок
допустим рисунок 100x20
LifeLine=LoadAnimImage("LifeLine.png",2,20,50,0)
т.е. вы буквально делите рисунок на кадры(длиной 2 пиксела) , а потом отображаете сколько нужно фрэймов(кадров) и все.

Atomikc 25.04.2007 22:48

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


Atomikc 28.04.2007 14:58

Re: Удаление
 
Так кто нить знает как сталкивать два обьекта, которые создаются в разное время из типов???? Очь надеюсь на вашу помощь...

HolyDel 29.04.2007 01:21

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

тут перебираются два списка, и когда один элемент одного списка имеет приблизительные координыты какого-либо элемента второго списка, то происходит бла-бла-бла

Atomikc 01.05.2007 15:41

Re: Удаление
 
Вложений: 2
Кароче, та же коллизия... В том то и проблема. Задаеём перебор первого цикла затем сразу же второго и получается взаимоисключающяя вещь. Если нет острероидов то не видно пули и наооборот. Нет пусль- невидно астероидов. Ладно. В связи с сложности моеё ситуации я выкладываю весь мой корявый код и медиа к нему. Может тогда кто чем сможет поможет....


Часовой пояс GMT +4, время: 02:33.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot