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

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

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

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

Ответ
 
Опции темы
Старый 28.12.2011, 17:18   #1
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Печаль Опять проблемы.

If KeyDown(200) Then
a=1
y=y-speed
EndIf
If KeyDown(208) Then
a=1
y=y+speed
EndIf
If KeyDown(205) Then
a=2
x=x+speed
EndIf
If KeyDown(203) Then
a=2
x=x-speed
EndIf

If KeyHit(200) And a=2 Then RotateImage hero,90
If KeyHit(208) And a=2 Then RotateImage hero,90
If KeyHit(205) And a=1 Then RotateImage hero,90
If KeyHit(203) And a=1 Then RotateImage hero,90
Изображение не вращается, хотя, если мониторить переменную "a", то она
меняется.
(Offline)
 
Ответить с цитированием
Старый 28.12.2011, 17:23   #2
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Опять проблемы.

Сообщение от Nikich Посмотреть сообщение
If KeyDown(200) Then
a=1
y=y-speed
EndIf
If KeyDown(208) Then
a=1
y=y+speed
EndIf
If KeyDown(205) Then
a=2
x=x+speed
EndIf
If KeyDown(203) Then
a=2
x=x-speed
EndIf

Then RotateImage hero,90
If KeyHit(208) And a=2 Then RotateImage hero,90
If KeyHit(205) And a=1 Then RotateImage hero,90
If KeyHit(203) And a=1 Then RotateImage hero,90
Изображение не вращается, хотя, если мониторить переменную "a", то она
меняется.
If KeyDown(200) Then
a=1

и

If KeyHit(200) And a=2

поэтому не вертица

а вообще код какая то бессмысленица. опиши что у тебя должно происходить при нажатии на кнопки.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо radiobutton за это полезное сообщение:
Colossus (13.01.2012), Nikich (28.12.2011)
Старый 28.12.2011, 17:32   #3
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Переменная "a" отвечает за то, можно ли сейчас вращать картинку. Я делаю TDS и мне надо сделать так, чтобы главный герой поворачивался в ту сторону, в которую идёт. То есть, при нажатии на кнопку вверх, он должен смотреть вверх и тп. Но если просто ставить, что при нажатии на кнопку вверх картинка вращается на 90 градусов, то при повторном нажатии он опять повернётся и будет идти вверх боком)
(Offline)
 
Ответить с цитированием
Старый 28.12.2011, 17:46   #4
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Опять проблемы.

тогда что-то вроде этого.

hero1 = loadimage("hero.bmp")
hero2 = copyimage(hero1)
rotateimage hero2, 90
hero3 = copyimage(hero1)
rotateimage hero3, 180
hero4 = copyimage(hero1)
rotateimage hero4, 270

................

If KeyHit(200) 
b=1
end if
If KeyHit(208) 
b=3
end if
If KeyHit(205) 
b=4
end if
If KeyHit(203) 
b=2
end if

...................

select b
case 1
drawimage hero1,x,y
case 2
drawimage hero2,x,y
case 3
drawimage hero3,x,y
case 4
drawimage hero4,x,y
end select
потому что
RotateImage image,value#

Эта команда работает не достаточно быстро, чтобы выполнять вращение рисунка в режиме реального времени!

Цель этой команды состоит в том, чтобы повернуть изображение на указанный угол. Так как она работает медленно, Вы должны будете это сделать заранее, до того, как они будут выведены на экран.
у тебя не совсем реальное время, но поворачиваться будит не только герой же?)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (28.12.2011)
Старый 28.12.2011, 18:01   #5
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)

Еее, большое спасибо!
(Offline)
 
Ответить с цитированием
Старый 29.12.2011, 00:41   #6
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Опять проблемы.

Еще если собираешся делать игру в 2д то посоветовал бы посмотреть в сторону Draw3d или FastImage.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Colossus (13.01.2012)
Старый 31.12.2011, 15:36   #7
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Function UpdateStones()
For i=0 To 20
 DrawImage stone(i),xs(i),ys(i)
 If ImagesCollide(gert,x,y,frames,stone(i),xs(i),ys(i),0) And col=3 Then 
 speed=0
 x=x-1
 EndIf
 If ImagesCollide(gert,x,y,frames,stone(i),xs(i),ys(i),0) And col=1 Then 
 speed=0
 y=y+1
 EndIf
 If ImagesCollide(gert,x,y,frames,stone(i),xs(i),ys(i),0) And col=2 Then 
 speed=0
 y=y-1
 EndIf
 If ImagesCollide(gert,x,y,frames,stone(i),xs(i),ys(i),0) And col=4 Then 
 speed=0
 x=x+1
 EndIf
 If ImagesCollide(gert,x,y,frames,stone(i),xs(i),ys(i),0) And col=5 Then 
 speed=0
 x=x+1
 y=y+1
 EndIf
 If ImagesCollide(gert,x,y,frames,stone(i),xs(i),ys(i),0) And col=6 Then 
 speed=0
 x=x-1
 y=y+1
 EndIf
 If ImagesCollide(gert,x,y,frames,stone(i),xs(i),ys(i),0) And col=7 Then 
 speed=0
 x=x+1
 y=y-1
 EndIf
 If ImagesCollide(gert,x,y,frames,stone(i),xs(i),ys(i),0) And col=8 Then 
 speed=0
 x=x-1
 y=y-1
 EndIf
 If ImagesCollide(cursor,MouseX(),MouseY(),0,stone(i),xs(i),ys(i),0) And MouseHit(1) Then
 shp(i)=shp(i)-10
 EndIf
 If shp(i)=0 Then
 FreeImage stone(i)
 EndIf
 Text MouseX(),MouseY(),shp(1)+"      "+shp(2)+"      "+shp(3)+"      "+shp(4)+"      "+shp(5)+"      "+shp(6)+"      "+shp(7)+"      "+shp(8)+"      "+shp(9)+"      "+shp(10)+"      "+shp(11)+"      "+shp(12)+"      "+shp(13)+"      "+shp(14)+"      "+shp(15)+"      "+shp(16)+"      "+shp(17)+"      "+shp(18)+"      "+shp(19)+"      "+shp(20)+"      "
Next
End Function
И так, у меня опять что-то пошло не так. Эта функция отвечает за прорисовку камней на карте. Они генерируются случайным образом, из-за этого я прибег к переменным. С типами у меня туго, так что мой выбор пал на массивы) В общем, рисуются они хорошо, коллизия конечно не идеально( если подойти к камню и зажать две противоположные клавиши(вверх-вниз, вправо-влево), то главного героя начнёт щемить в камни), но не это главное. Когда я решил сделать так, чтобы при нажатии
мыши на камень десять раз, он разрушался. Как-раз тут и начались проблемы. Если отслеживать переменную "shp" которая отвечает за "жизни" камней, то она будет отниматься, но не должным образом. Она отнимается то ли с каким-то шансом, то ли в какое-то время. В общем мне нужна ваша помощь в двух вещах:
1). Помогите найти ошибку.
2). Допустим, всё-таки я уничтожу этот камень функцией FreeImage. Но когда цикл начнётся заново, то на функции DrawImage он остановится, из-за того, что данного изображения больше не существует Так что пожалуйста, помогите и с этой проблемой.
(Offline)
 
Ответить с цитированием
Старый 01.01.2012, 09:56   #8
mauNgerS
Разработчик
 
Аватар для mauNgerS
 
Регистрация: 10.10.2008
Сообщений: 501
Написано 258 полезных сообщений
(для 670 пользователей)
Ответ: Опять проблемы.

Типы решат все твои проблемы.
Вечером, время будет, напишу код.

П. С. Может кто-нибудь вперёд ответит.
__________________
(Offline)
 
Ответить с цитированием
Старый 01.01.2012, 12:54   #9
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Я и не тороплю с ответом.
(Offline)
 
Ответить с цитированием
Старый 01.01.2012, 20:08   #10
mauNgerS
Разработчик
 
Аватар для mauNgerS
 
Регистрация: 10.10.2008
Сообщений: 501
Написано 258 полезных сообщений
(для 670 пользователей)
Ответ: Опять проблемы.

Global cursor
Global LClick, mx#, my#; задаём переменные для мыши глобально

; объявляем тип
Type Main
	Field stone; камень
	Field x#, y#; координаты камня
	Field life; жизнь камня
End Type

Graphics3D 800, 600,0,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

cursor=LoadImage("c.bmp")
CreateStone(50); делаем камни

HidePointer 
Repeat
Cls
Mouse()

UpdateStones(); обновляем камни
DrawImage cursor, mx, my

Flip 0
Until KeyHit(1)
End

Function CreateStone(imax%=0)
	For i=1 To imax
		m.Main=New Main; создаём новый элемент типа, далее следует то, что храним в этом элементе
		m\stone=LoadImage("h.bmp"); камень
		
		m\x=Rnd(100,700); координата х
		m\y=Rnd(100,500); координата y

		m\life=10; жизнь
	Next
End Function 

Function UpdateStones()
	For m.Main=Each Main; перебираем тип
		DrawImage m\stone, m\x, m\y
	
		If ImagesCollide (cursor,mx,my,0,m\stone,m\x, m\y, 0) And LClick=2
			m\life=m\life-1
		EndIf
	
		If m\life=0 
			FreeImage m\stone; удаляем каменнь
			Delete m; удаляем элемент типа
		EndIf 
	Next
End Function

Function Mouse(); функция для срабатывания мыши по отпусканию кнопки
	mx=MouseX()
	my=MouseY()

	If LClick=2 LClick=0
	If LClick=0
		If MouseDown(1) LClick=1
	Else 
		If Not MouseDown(1)
			LClick=2
		EndIf
	EndIf
End Function
Тип это как картотека в библиотеке. Элемент типа это карточка и в ней может хранится что угодно.

Когда мы перебираем тип, это как цикл. Только цикл фиксирован, допустим от 0 до 20. А перебор типа перебирает все элементы. По ходу действия программы можно удалять или добавлять элементы, это не вызовет ошибки.

Как-то так
__________________

Последний раз редактировалось mauNgerS, 01.01.2012 в 22:14.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (11.01.2012)
Старый 01.01.2012, 23:10   #11
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Опять проблемы.

Зачем для каждого камня загружать картинку в память, если все камни одинаковые? Нужна всего 1 картинка.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо radiobutton за это полезное сообщение:
LLI.T.A.L.K.E.R. (12.01.2012), Nex (02.01.2012)
Старый 02.01.2012, 05:32   #12
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Опять проблемы.

Global stone = LoadImage("h.bmp"); камень

;в функцию CreateStone вторым параметром передаем ссылку на картинку (stone).

Function CreateStone(imax%=0,image)
	For i=1 To imax
		m.Main=New Main; создаём новый элемент типа, далее следует то, что храним в этом элементе
		m\stone=image; используем уже загруженную картинку
		
		m\x=Rnd(100,700); координата х
		m\y=Rnd(100,500); координата y

		m\life=10; жизнь
	Next
End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (11.01.2012)
Старый 02.01.2012, 07:28   #13
mauNgerS
Разработчик
 
Аватар для mauNgerS
 
Регистрация: 10.10.2008
Сообщений: 501
Написано 258 полезных сообщений
(для 670 пользователей)
Ответ: Опять проблемы.

;в функцию CreateStone вторым параметром передаем ссылку на картинку (stone).
тогда уже Global не нужно

П. С. Так конечно и cursor можно сделать не глобально
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (11.01.2012)
Старый 11.01.2012, 23:54   #14
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Большое спасибо. А есть способ как-нибудь по другому сделать коллизию?
(Offline)
 
Ответить с цитированием
Старый 12.01.2012, 02:23   #15
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Опять проблемы.

Допустим, всё-таки я уничтожу этот камень функцией FreeImage. Но когда цикл начнётся заново, то на функции DrawImage он остановится, из-за того, что данного изображения больше не существует Так что пожалуйста, помогите и с этой проблемой.
Function UpdateStones()
	For m.Main=Each Main; перебираем тип
		DrawImage m\stone, m\x, m\y
	
		If ImagesCollide (cursor,mx,my,0,m\stone,m\x, m\y, 0) And LClick=2
			m\life=m\life-1
		EndIf
	
		If m\life=0 
			FreeImage m\stone; удаляем каменнь
			Delete m; удаляем элемент типа
		EndIf 
	Next
End Function
Делай проверку на отсутствие/присутствие:
m<>Null

For m.Main=Each Main ; перебираем тип
If m<>Null then ; проверка есть ли этот камень в памяти (точнее, если не равен пустоте)
И почему m.Main? Как это связано с камнем (stone)
Почему не так: s.Stones или Stone.StoneType

Type StoneType
	Field image; рисунок камня
	Field x#, y#; координаты камня
	Field life; жизнь камня
End Type
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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