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

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

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

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

Ответ
 
Опции темы
Старый 05.02.2012, 15:01   #1
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Печаль помогите плз

я решил создать свою 2д игру, и чет пока ничего особо не получается. хочу сделать игру отдалённо похожую на гта1. наработки уже есть. и сразу же появилась проблема(я не мастер программирования) надо сделать так, чтобы чел не проходил сквозь здания.
вот код игры:
 Graphics 800,600,32,1
Global x=100
Global y=100

Global speed=4
SetBuffer BackBuffer()





Global player=LoadImage("1.bmp")
Global ground=LoadImage ("ground1.bmp")
Global house1=LoadImage ("house1.bmp")



;;Global mouseimage = LoadImage("cursor.bmp")
;;DrawImage mouseimage,MouseX(),MouseY()
;;Delay 20
;;HandleImage mouseimage,0,0



DrawImage player,x,y
MidHandle player
MaskImage player,0,0,10
DrawImage player,x,y
DrawImage ground,0,0
Function updateplayer()



DrawImage player,x,y


 
If ImagesCollide(player,x,y,0,house1,300,400,0) Then speed=0



If KeyDown(200)
y=y-speed
DrawImage player,x,y
EndIf



If KeyDown(208 )
y=y+speed
DrawImage player,x,y
EndIf


If KeyDown(205)
x=x+speed
DrawImage player,x,y
EndIf

If KeyDown(203)
x=x-speed;1,
DrawImage player,x,y 
EndIf




End Function
While Not KeyDown(1)
updateplayer()
Flip 
Cls


DrawImage ground,0,0
DrawImage house1,300,400
;If ImagesCollide Then speed=0
 
Wend
и чел немного заходит в дом, а назад никак. подскажите, плз!!!
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 15:31   #2
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: помогите плз

Тебе нужно векторное перемещение делать.
Имею ввиду, что где-то в программе есть две переменные (или больше, по числу измерений пространства) типа deltax, deltay. В которых хранится сдвиг координат игрока на текущий шаг/кадр. И еще отдельно скорость speed#.

Потом, в момент сдвига координаты игрока суммируются с координатами сдвига:
px# = px + deltax*speed#
py# = py + deltay*speed#
Расчет удобно производить в дробных числах, а для отрисовки графики потом откидывать дробную часть.

Пример:
Влево-вверх: deltax=-1; deltay=-1
Вправо-вверх: deltax=1; deltay=-1
Вниз: deltax=0; deltay=1

Ну и вариации, в зависимости от нужд. Можно тоже дробями сделать.
Спасибо не мне, а ему.
http://forum.boolean.name/showthread.php?p=20368
4-ый,5-ый и последний пункт особенно внимательно изучи.
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 15:56   #3
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Ответ: помогите плз

А на примере написанного кода?
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 15:59   #4
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: помогите плз

Может за тебя игру сделать?
Первый пункт тоже почитай.
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 16:02   #5
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Вопрос Нужна помощь

Уж слишком как-то все сложно объяснено
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 16:04   #6
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Ответ: помогите плз

Я не прошу за меня игру делать, я просто прошу помощи начинающему
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 16:21   #7
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: помогите плз

я думаю что на 3д будет даже лучше чем 2д тем более , тебе надо делать физику в 2д это геморойно а на 3д есть двиг PhysX и уже готовый пример гта с игроком и машинами , также в 3д будет просто современней
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 16:24   #8
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: помогите плз

Главная идея - догадаться проверить координаты до того, как сдвигать игрока. А иначе потом каждая проверка будет возвращать "столкновение".

И зачем в коде столько раз повторяется drawimage player?

<загрузка всех картинок>
<while>
--<обновляем координаты/проверяем столкновения>
--<стираем экран>
--<рисуем фон, потом игрока (всего один раз за весь код)>
--<flip (то есть все нарисованное переводится из памяти непосредственно на дисплей)>
<wend>
p.s. Если нужна физика, и вообще, вот цитата из аналогичной темы:

Сообщение от MoKa Посмотреть сообщение
Сразу предупреждаю: Blitz2D, использует старый и не поддерживаемый уже подход вывода 2D графики. Она выводится используя процессор, а не аппаратное ускорение (видео карту). Вывод происходит по пикселю, что очень медленно.
Не используй 2D в Blitz3D, это имхо, практически не несёт никакой пользы для развития, т.к. эти знания будут только относиться к Blitz2D.
Используй что-то более современное, например FastImage + Blitz3D, или BlitzMax.
Для физики, попиксельную также никто не делает, обычно используют физ. движки, есть Box2D для BlitzMax и другие, рекомендую их посмотреть. Для Blitz3D также есть физ движки.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (05.02.2012)
Старый 05.02.2012, 16:27   #9
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: помогите плз

deltax#=0
deltay#=0
speed#=0

If KeyDown(200)  Then deltay#=-1
If KeyDown(208)  Then deltay#=1
If KeyDown(205) Then deltax#=1
If KeyDown(203) Then deltax#=-1

(громоздко конечно)
If KeyDown(203) Or KeyDown(208) Or KeyDown(205) Or KeyDown(200) Then 
speed#=5.0
EndIf

(пусть px - временные, а x - окончательные координаты)
px=x+deltax*speed
py=y+deltay*speed

If px<0 Then px=1280
If px>1280 Then px=0
If py<0 Then py=1024
If py>1024 Then py=0

***отдельно где-то, где все функции***
Function CollideStones(px,py)
	For s.stone=Each stone
		(коллизия или проверка координат, все равно вроде)
		If ImagesCollide(player,px,py,0,stoneimage,s\x, s\y, 0)
			Return True
		EndIf
	Next
	Return False
End Function
***

If Not CollideStones(px,py) then
	x=px
	y=py
Endif
Я этим пользуюсь. Опять же, спасибо FireOwl'у.
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 16:59   #10
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Ответ: помогите плз

а как объявлять функцию? может я покажусь тупым, но я в блице целых дня сижу.
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 17:02   #11
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: помогите плз

Не понял вопроса.
Function qwerty()
...
End Function
Потом пиши где хочешь qwerty().
Ты про это?
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 17:07   #12
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Ответ: помогите плз

Я не знаю как этот массив включить в мою игру
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 17:16   #13
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: помогите плз

Прости, но вообще не понимаю твоих вопросы. Какой массив?
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 17:22   #14
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Ответ: помогите плз

Блин... Не Массив, а вектора
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 17:25   #15
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: помогите плз

Copy-paste - самый лучший выбор.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +1, время: 10:04.


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