Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 05.01.2007, 23:19   #1
Atomikc
Бывалый
 
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений
(для 257 пользователей)
Удаление

Я сталкнулся с такой проблемой. У меня здаровье игрока представлены 8-ю картинками(Полосками).
Как при нажатии какой либо кнопки удалять по очереди картинки, а потом также их рисовать.
(Offline)
 
Ответить с цитированием
Старый 05.01.2007, 23:34   #2
jimon
 
Сообщений: n/a
Re: Удаление

просто циклом
рисуй те что тебе нужны в данный момент (в данный кадр)
 
Ответить с цитированием
Старый 06.01.2007, 00:25   #3
alcoSHoLiK
Дэвелопер
 
Регистрация: 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
Atomikc
Бывалый
 
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений
(для 257 пользователей)
Re: Удаление

Нет. Вы не поняли. Что создать переменную i эт понятно. Вопрос звучит так: Как рисовать и стирать изображения. Вот вам картинка. Там понятней будет показать что я хочю узнать.
(Offline)
 
Ответить с цитированием
Старый 06.01.2007, 02:13   #5
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Удаление

решение 1:
через буффер
copyrect
writepixel
тебе помогут
решение 2:
несколько кадров той панельки, один кадлр на один возможный вариант изображения. потом просто менять кадр.
(Offline)
 
Ответить с цитированием
Старый 06.01.2007, 02:21   #6
Atomikc
Бывалый
 
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений
(для 257 пользователей)
Re: Удаление

А можно пример первого варианта. Я про втрой тоже думал, но мудится с фреймами как то лень.
(Offline)
 
Ответить с цитированием
Старый 06.01.2007, 02:33   #7
HolyDel
 
Регистрация: 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
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Удаление

Мне кажется, проще сделать маску нужной формы, а под ней рисовать прямоугольные полоски. В данном случае в роли маски выступает сама панелька, места, где будут полоски, прозрачными сделать - только и делов.
(Offline)
 
Ответить с цитированием
Старый 09.01.2007, 00:46   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Удаление

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

У тебя должны они быть отдельно.
(Offline)
 
Ответить с цитированием
Старый 05.04.2007, 16:33   #10
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Удаление

А как тебе такой вариант вместо полосок сектора. Ну допустим сначала полоска из 5 секторов зеленого цвета потом, допустим при повреждении игрока, крайняя правая полоска становится желтого цвета потом красного потом черного все. переход на след зел полоску и так далее. Я делал так. Надо-то всего нарисовать зел сектор жел и красн. А выглядит прилично.
(Offline)
 
Ответить с цитированием
Старый 06.04.2007, 02:44   #11
mike1983
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
Atomikc
Бывалый
 
Регистрация: 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
Atomikc
Бывалый
 
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений
(для 257 пользователей)
Re: Удаление

Так кто нить знает как сталкивать два обьекта, которые создаются в разное время из типов???? Очь надеюсь на вашу помощь...
(Offline)
 
Ответить с цитированием
Старый 29.04.2007, 01:21   #14
HolyDel
 
Регистрация: 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
Atomikc
Бывалый
 
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений
(для 257 пользователей)
Re: Удаление

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление типа с ентитями! Baisangur 3D-программирование 9 22.03.2009 23:02
Удаление частиц CRACK 3D-программирование 8 14.06.2007 00:03
Удаление частей объекта. ЛысыЙ_Чук-Иванчук 3D-программирование 6 29.03.2007 22:04
Удаление Mathcad 13 Михаил Болтовня 2 07.05.2006 20:41


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com