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

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

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

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 10.01.2007, 03:05   #1
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Подмигивание Разработка сетевых игр

Итак, похоже тема создания сетевых игр на Blitz3D интересует многих, а русскоязычных материалов реально мало. Чтобы их стало немного больше, ваш покорный слуга HolyDel решил написать маааааленький тутор на эту тему. Так как писать сетевые крестики-нолики неохота, будем писать нечто более продвинутое, а именно космические войны, на кораблях. Корабли будут биллбоардами с натянутыми на них текстурами кораблей.
Начнем собственно с создания подключения:
[blitz]
is_host=StartNetGame()=2
[/blitz]
Переменной is_host присваивается значение условия StartNetGame()=2, т.е. is_host=1 если StartNetGame()=2 иначе is_host=0. Эта переменная будет показывать является ли этот компьютер сервером.
Далее запрашиваем имя, создаем графический режим, а также камеру:
[blitz]
Graphics3d 800,600,32,1
SetBuffer backbuffer()
cam=createcamera()
[/blitz]
Тут все просто. Далее опишем структуру сетевого игрока:
[blitz]
Type player
field ent,id,name$
field en#
field ammo[4],ammo2[4]
field dx#,dz#
field mode
End Type
[/blitz]
Ent – для указателя на объект, id – сетевой идентификатор игрока, name - имя игрока, совпадающие с сетевым именем игрока. En# - энергия игрока, ammo, ammo2 здесь будет храниться кол-во патронов первичного и вторичного оружия, dx, dz – скорость перемещения по оси x и оси z, mode для определения режима игрока - 1 игрок (человек) 2 – бот, 0 – ошибка какая-то.
Теперь создадим квад и наложим на него текстуру корабля:
[blitz]
Global quad=CreateMesh()
b=LoadBrush("media/rocket.bmp",5)
s=CreateSurface(quad,b)
v0=AddVertex(s,-4,0,4,0,0)
v1=AddVertex(s,4,0,4,1,0)
v2=AddVertex(s,4,0,-4,1,1)
v3=AddVertex(s,-4,0,-4,0,1)
AddTriangle(s,v0,v1,v2)
AddTriangle(s,v0,v2,v3)
[/blitz]

Теперь добавим сетевого игрока, одновременно с ним добавим игрока на машину как в трехмерный мир так и в список player где и будут находиться все игроки (в том числе и боты)
[blitz]
p.player=New player
If netgame Then myid=CreateNetPlayer(name$) Else myid=Rand(1,2054345431)
p\id=myid
myent=CopyEntity(quad)
p\ent=myent
p\en=100
p\mode=1
p\ammo[1]=100
p\ammo2[1]=4
myp.player=p.player
p\name=name
[/blitz]
Здесь вы наверняка заметили всякие myp, myid, myent это просто копии полей для ускоренного доступа к полям своего корабля.

Немного подумав, я решил переделать начало на такое:
[blitz]
i=Input("type 1 if net game any other for local game =>")
netgame=i=1
If netgame
sng=StartNetGame()
is_host=sng=2
netgame=sng>0
Else
is_host=1
EndIf
[/blitz]
Здесь переменной netgame присваивается 1 если игра сетевая. Это может понадобиться для локальной (не сетевой игры).

Чтоб камера «смотрела» вниз:
[blitz]
RotateEntity cam,90,0,0
[/blitz]

Основной цикл:
[blitz]
While Not KeyDown(1)
ang#=ATan2(400-MouseX(),300-MouseY())
RotateEntity myent,0,ang,0

If KeyDown(200)
myp\dx=myp\dx-Sin(ang)*0.0008
myp\dz=myp\dz+Cos(ang)*0.0008
EndIf
myp\dx=myp\dx*0.995
myp\dz=myp\dz*0.995
TranslateEntity myent,myp\dx,0,myp\dz
PositionEntity cam,EntityX(myent),32,EntityZ(myent)
RenderWorld
Oval MouseX()-3,MouseY()-3,5,5,0
Flip 0
Wend
[/blitz]
Здесь: определяется угол поворота корабля, и корабль поворачивается на этот угол. При нажатии на стрелку вверх, изменяются значения смещения корабля по оси x и z (Аля тригонометрия). Потом эти-же абсолютные значения уменьшаются (гасятся (Аля физика)). Потом объект перемещается на величину смещения, камера устанавливается над кораблем, мир рендерится, отображается импровизированный курсор, буферы меняются местами.
Напишем три функции, которые нам могут понадобиться:
[blitz]
function PackMoveMessage$(p.player)
return left(entityx(p\ent),6)+left(entityz(p\ent),6)+left (int(entityYaw(p\ent)),4)
End Function

Function UnPackMoveMessage(p.player,dat$)
positionentity p\ent,mid(dat,1,6),0,mid(dat,7,6)
rotateentity p\ent,0,mid(dat,13,4),0
End Function

function FindPlayer.player(id)
for p.player=each player
if p\id=id then return p
Next
return null
End Function
[/blitz]
Первая собирает сообщение о игроке, в сообщение включаются координаты по икс и зет, а также поворот по оси грек.
Вторая разбирает сообщение и устанавливает корабль игрока в эту точку и поворачивает на данный угол.
Третья ищет игрока по идентификатору.
(Offline)
 
Ответить с цитированием
Старый 10.01.2007, 03:11   #2
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Re: Разработка сетевых игр

Теперь собственно сетевой механизм. Это попробую описать подробно:
Во, первых все что связанно с сетью заключим в блок if netgame …… endif, чтоб небыло ошибок. Тогда имеем:
[blitz]
if netgame
sendnetmsg 1,PackMoveMessage(myp),myid,0,0

While RecvNetMsg()
Select NetMsgType()
Case 1:
p.player=FindPlayer(netmsgfrom)
if p<>null
UnPackMoveMessage(p,netmsgdata()
else
p.player=New player
p\id=netmsgfrom()
p\ent=CopyEntity(quad)
p\en=100
p\mode=1
p\ammo[1]=100
p\ammo2[1]=4
p\name=netplayername(p\id)
endif
case 100:
p.player=New player
p\id=netmsgfrom()
p\ent=CopyEntity(quad)
p\en=100
p\mode=1
p\ammo[1]=100
p\ammo2[1]=4
p\name=netplayername(p\id)
Default
DebugLog NetMsgType+":"+NEtmsgdata()
End Select
Wend

EndIf
[/blitz]

Первая строчка
sendnetmsg 1,PackMoveMessage(myp),myid,0,0
отправляет сообщение по сети, это сообщение имеет свой тип. В данном случае 1 – первый параметр.
Второй параметр само сообщение (строка)
Третий от кого – здесь стоит myid, посмотрите выше, этой переменной мы присвоили значение CreateNetPlayer – это сетевой идентификатор. То есть мы посылаем сообщение от себя.
Четвертый 0 – это кому отправляется сообщение, если 0 то сообщение отправляется всем игрокам, собственно что нам и надо, чтобы у всех игроков наш корабль отображался там, где он находится у нас.
Пятый 0- если здесь будет стоять 1 то будет проверяться достоверность сообщения, это приводит к примерно трехкратному замедлению выполнения команды, если будет стоять 0 то возможно сообщение будет принято не то что было послано (может быть потерян смысл). Так как позиция и поворот это не очень важно, то и пусть себе теряется .

Теперь пару слов о втором параметре PackMoveMessage(myp), здесь мы собираем всю инфу, которую хотим передать о игроке myp – собственно нашем игроке функцией PackMoveMessage (она была описана ранее).

Далее идет конструкция
While recvnetmsg()
Wend
Что обозначает пока есть сообщение, этот цикл будет крутиться до тех пор, пока есть принятое сообщение.
Далее стоит
Select NetMsgType
End select
Тут идет определение типа сообщения и соответственная раскодировка сообщения.
Например:
case 100:
p.player=New player
p\id=netmsgfrom()
p\ent=CopyEntity(quad)
p\en=100
p\mode=1
p\ammo[1]=100
p\ammo2[1]=4
p\name=netplayername(p\id)
такое сообщение (сообщение с таким типом) отсылается всем игрокам, когда новый игрок присоединился к игре.
Здесь мы создаем нового игрока, его id мы получаем из netmsgfrom(), т.е. от кого пришло сообщение, а имя игрока получаем из netplayername(p\id). Остальное вроде понятно.
Далее:
Case 1:
p.player=FindPlayer(netmsgfrom)
if p<>null
UnPackMoveMessage(p,netmsgdata()
else
p.player=New player
p\id=netmsgfrom()
p\ent=CopyEntity(quad)
p\en=100
p\mode=1
p\ammo[1]=100
p\ammo2[1]=4
p\name=netplayername(p\id)
endif
помните какое сообщение отсылается с типом 1? Правильно! Сообщение о позиции игрока. Это сообщение декодируется соответствующей функцией. Только сначала ищется игрок в списке от которого пришло сообщение. Если игрок найден то к нему применяется сообщение если не найден то он создается.

Ну пока все, приду из аццкого колледжа –продолжу.

Весь код
i=Input("type 1 if net game any other for local game =>")
netgame=i=1

If netgame
sng=StartNetGame()
is_host=sng=2
netgame=sng>0
Else
is_host=1
EndIf

name$=Input("your name:")
Graphics3D 800,600,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()
cam=CreateCamera()

Type player
	Field ent,id,name$
	Field en#
	Field ammo[4],ammo2[4]
	Field dx#,dz#
	Field mode
End Type

Global quad=CreateMesh()
b=LoadBrush("media/rocket.bmp",5)
s=CreateSurface(quad,b)
v0=AddVertex(s,-4,0,4,0,0)
v1=AddVertex(s,4,0,4,1,0)
v2=AddVertex(s,4,0,-4,1,1)
v3=AddVertex(s,-4,0,-4,0,1)
AddTriangle(s,v0,v1,v2)
AddTriangle(s,v0,v2,v3)

p.player=New player
If netgame Then myid=CreateNetPlayer(name$) Else myid=Rand(1,2054345431)
p\id=myid
myent=CopyEntity(quad)
p\ent=myent
p\en=100
p\mode=1
p\ammo[1]=100
p\ammo2[1]=4
myp.player=p.player
p\name=name

RotateEntity cam,90,0,0

While Not KeyDown(1)
	ang#=ATan2(400-MouseX(),300-MouseY())
	RotateEntity myent,0,ang,0
	
	If KeyDown(200)
		myp\dx=myp\dx-Sin(ang)*0.0008
		myp\dz=myp\dz+Cos(ang)*0.0008
	EndIf
	myp\dx=myp\dx*0.995
	myp\dz=myp\dz*0.995
	TranslateEntity myent,myp\dx,0,myp\dz
	PositionEntity cam,EntityX(myent),32,EntityZ(myent)
	RenderWorld
	Oval MouseX()-3,MouseY()-3,5,5,0
	
	For p.player=Each player
		If p\id<>myid
			CameraProject(cam,EntityX(p\ent),0,EntityZ(p\ent))
			x=ProjectedX()
			y=ProjectedY()
			If x>-100 And x<900 And y>-100 And y<700
				Text x,y-16,p\name,1
			EndIf
		EndIf
	Next
	Flip 0
	
	;update network
	If netgame
	SendNetMsg 1,PackMoveMessage(myp),myid,0,0
	
	While RecvNetMsg()
		Select NetMsgType()
			Case 1:
				p.player=FindPlayer(NetMsgFrom)
				If p<>Null
					UnPackMoveMessage(p.player,NetMsgData())
				Else
					p.player=New player
					p\id=NetMsgFrom()
					p\ent=CopyEntity(quad)
					p\en=100
					p\mode=1
					p\ammo[1]=100
					p\ammo2[1]=4
					p\name=NetPlayerName(p\id)				
				EndIf
			Case 100:
				p.player=New player
				p\id=NetMsgFrom()
				p\ent=CopyEntity(quad)
				p\en=100
				p\mode=1
				p\ammo[1]=100
				p\ammo2[1]=4
				p\name=NetPlayerName(p\id)
			Default
				DebugLog NetMsgType+":"+NetMsgData()
		End Select
	Wend
	
	EndIf
	
Wend

Function PackMoveMessage$(p.player)
	Return Left(EntityX(p\ent),6)+Left(EntityZ(p\ent),6)+Left(Int(EntityYaw(p\ent)),4)
End Function

Function UnPackMoveMessage(p.player,dat$)
	PositionEntity p\ent,Mid(dat,1,6),0,Mid(dat,7,6)
	RotateEntity p\ent,0,Mid(dat,13,4),0
End Function

Function FindPlayer.player(id)
	For p.player=Each player
		If p\id=id Then Return p
	Next
	Return Null
End Function
Пс. Пока они тока двигаться будут, просто писал где – то 2 часа вместе с этим тескстом, к ночи еще че-нить добавлю.
Пс. Я это еще не проверял, поэтому могут быть мелкие ошибки. Ваш покорный слуга HolyDel a.k.a. Олег Сапронов.
(Offline)
 
Ответить с цитированием
Старый 10.01.2007, 22:04   #3
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Re: Разработка сетевых игр

Итак, продолжим.
Во-первых добавим поле к игроку с названием score. А также rt[4],rt2[4], где будет храниться время последнего запуска пули.
Во вторых еще два типа – bullet и flame
[blitz]
Type player
Field ent,id,name$
Field en#
Field ammo[4],ammo2[4]
Field dx#,dz#
Field mode,score
field rt[4],rt2[4]
End Type

Type bullet
Field ent,dam#,l#,id
End Type

Type flame
Field spr,l#,r#,dr#
End Type
[/blitz]

Далее загрузим космос и огонь, а также картинку для радара.
[blitz]
;s1=CreatePlane()
s2=CreatePlane()
;s3=CreatePlane()
s4=CreatePlane()
;st1=LoadTexture("media/stars1.bmp",3+256)
st2=LoadTexture("media/stars2.bmp",3+256)
;st3=LoadTexture("media/stars3.bmp",3+256)
st4=LoadTexture("media/stars4.bmp",3+256)
;EntityTexture s1,st1
EntityTexture s2,st2
;EntityTexture s3,st3
EntityTexture s4,st4
;PositionEntity s1,0,-200,0
PositionEntity s2,0,-100,0
;PositionEntity s3,0,-50,0
PositionEntity s4,0,-25,0
;ScaleTexture st1,32,32
ScaleTexture st2,32,32
;ScaleTexture st3,32,32
ScaleTexture st4,32,32


radar=LoadImage("media/radar.png")

Global flame[2]
flame[1]=LoadSprite("media/flame1.bmp")
flame[2]=LoadSprite("media/flame2.bmp")
[/blitz]
Вы можете раскоментировать некоторые строки, я их закоментил так как у меня виснуть начинает.
Насчет неба – это просто четыре (тут две) плейна, они находятся на разной высоте, поэтому создается эффект объемности окружения.

Для огня из сопла напишем следующие функции:
[blitz]
Function AddFlame(ent)
f.flame=New flame
f\spr=CopyEntity(flame[Rand(1,2)])
PositionEntity f\spr,EntityX(ent),0,EntityZ(ent)
RotateEntity f\spr,0,EntityYaw(ent),0
MoveEntity f\spr,0,0,-4
TurnEntity f\spr,0,Rnd(-19.0,19.0),0
f\l=50:f\r=Rnd(0,360):f\dr=Rnd(-5.0,5.0)
End Function

Function UpdateFlames()
For f.flame=Each flame
f\l=f\l-1
EntityAlpha f\spr,f\l/50.0
ScaleSprite f\spr,(50-f\l)/10+2,(50-f\l)/10+2
MoveEntity f\spr,0,0,-0.3
f\r=f\r+f\dr
RotateSprite f\spr,f\r
If f\l<0 Then FreeEntity f\spr:Delete f
Next
End Function
[/blitz]
Ну здесь вроде вопросов быть не должно, итак все предельно понятно. UpdateFlames() пропишем перед RenderWorld.
Надо еще выводить имена игроков на экран, над их кораблем, для этого вобъем следущие после RenderWorld:
[blitz]
For p.player=Each player
If p\id<>myid
CameraProject(cam,EntityX(p\ent),0,EntityZ(p\ent))
x=ProjectedX()
y=ProjectedY()
If x>-100 And x<900 And y>-100 And y<700
Text x,y-16,p\name,1
EndIf
EndIf
Next
[/blitz]
Здесь перебираем всех игроков, и если их id не совпадает с нашим (если это не наш корабль), выводим над ним текст с именем. Координаты текста определяются через проецирование камеры на объект.

Для отображения корабля на радаре нам надо функцию рисования треугольника.
[blitz]
Function DrawTris(x,y,a)
a=180+a
x1#=x+Sin(a)*6
y1#=y+Cos(a)*6
x2#=x+Sin(a-120)*2
y2#=y+Cos(a-120)*2
x3#=x+Sin(a+120)*2
y3#=y+Cos(a+120)*2
Line x1,y1,x2,y2
Line x1,y1,x3,y3
Line x2,y2,x3,y3
End Function
[/blitz]
Здесь чисто математика, мы определяем координаты вершин и рисуем лини между этими вершинами.
Там где выводили имена игроков, изменим:
[blitz]
For p.player=Each player
If p\id<>myid
CameraProject(cam,EntityX(p\ent),0,EntityZ(p\ent))
x=ProjectedX()
y=ProjectedY()
If x>-100 And x<900 And y>-100 And y<700
Text x,y-16,p\name,1
EndIf
EndIf
sx=54+800-108+EntityX(p\ent)/10
sy=54-EntityZ(p\ent)/10
DrawTris(sx,sy,EntityYaw(p\ent))
Next
[/blitz]
Собсно новый фрагмент:
sx=800-54+EntityX(p\ent)/10
sy=54-EntityZ(p\ent)/10
DrawTris(sx,sy,EntityYaw(p\ent))
Здесь sx, sy это координата корабля на радаре, ессено эти значения зависят от координат корабля в мире, так как радар а на 100 на 100, а мир 1000 на 1000, мировые координаты надо поделить на 10, чтобы как-бы спроецировать мир на радар. 54 это центр радара, ну 50 это 100/2 и 4 это рамка. То есть мы от границы экрана справа, отнимаем 54 – это и будет центр по оси х, с sy проще, так как радар находится в самом верху, тут мы прибавляем к центру -EntityZ(p\ent)/10, т.е. В общем это было получено экспериментальным путем.

Дли снарядов, ракет и т.д. нам нужен еще один квад, уже пустой, на прошлый квад мы сразу наложили текстуру корабля, уже при создании, просто скопируем оттуда код, и уберем тексу нах.
[blitz]
Global quad2=CreateMesh()
s=CreateSurface(quad2)
v0=AddVertex(s,-4,0,4,0,0)
v1=AddVertex(s,4,0,4,1,0)
v2=AddVertex(s,4,0,-4,1,1)
v3=AddVertex(s,-4,0,-4,0,1)
AddTriangle(s,v0,v1,v2)
AddTriangle(s,v0,v2,v3)
PositionEntity quad2,0,120,0
[/blitz]
Это можно поставить прям после создания первого квада.
Теперь создадим массив для текстур снарядов и загрузим одну.
[blitz]
global bulls[4]
bulls[1]=loadtexture("media/disrap.png")
textureblend bulls[1],3
[/blitz]
Кваду будем ставить режим наложения – аддитивный, так как это типа огонь.

Далее введем характиристики оружия:
[blitz]
Dim ft(4)
Dim ft2(4)
ft(1)=7
ft(2)=11
ft(3)=3
ft(4)=15
ft2(1)=35
ft2(2)=20
ft2(3)=40
ft2(4)=45
[/blitz]
Эти значения будут определять частоту огня, точнее задержку перед следующим выстрелом. Чем меньше задержка, тем скорострельнее оружие.

Для своего корабля (пока только для своего) инкреминтируем значения полей rt[1..4] и rt2[1..4], естественно сделаем это в цикле:
For i=1 To 4
myp\rt[i]=myp\rt[i]+1
myp\rt2[i]=myp\rt2[i]+1
Next
Далее при нажатии левой кнопки мыша будет стрельба.

[blitz]
If MouseDown(1)
If myp\rt[cw]>ft(cw) And myp\ammo[cw]>0
b.bullet=New bullet
b\ent=CopyEntity(quad2)
EntityBlend b\ent,3
EntityTexture b\ent,bulls[cw]
PositionEntity b\ent,EntityX(myent),0.01,EntityZ(myent)
RotateEntity b\ent,0,EntityYaw(myent)+Rnd(-1,1),0
b\l=100
b\dam=20
b\spd=3
b\id=myid
myp\rt[cw]=0
myp\ammo[cw]=myp\ammo[cw]-1
EndIf
EndIf
[/blitz]
Cw это current weapon, в этой переменной хранится значение текущего основного орудия.
Здесь проверяем можно ли стрелять, стрелять можно только если есть патроны myp\ammo[cw]>0 и орудие готово myp\rt[cw]>ft(cw), другими словами если оно уже перезарядилось.
Затем myp\rt[cw]=0 пусть опять перезаряжается и убираем одну пулю myp\ammo[cw]=myp\ammo[cw]-1.
Из того что внутри стоит разве что выделить то, что пуля «запоминает» индекс стрельца, это во первых чтоб игрока не поразила своя пуля, во вторых чтоб приписывать очко тому, чья пуля добьет противника.

Собственно обновление пуль:
[blitz]
For b.bullet=Each bullet
MoveEntity b\ent,0,0,b\spd
b\l=b\l-1
If b\l<0 Then FreeEntity b\ent:Delete b
Next
[/blitz]
Пока только так.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Артем Валерьевич (30.08.2010), НубеГ (23.06.2008)
Старый 27.01.2007, 17:54   #4
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Re: Разработка сетевых игр

Sorry за глупый вопрос, что нужно выбирать в StartNetGame для игры по интернету? (у меня получилось только по локальной сети )
(Offline)
 
Ответить с цитированием
Старый 27.01.2007, 18:29   #5
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Разработка сетевых игр

Sorry за глупый вопрос, что нужно выбирать в StartNetGame для игры по интернету? (у меня получилось только по локальной сети )
Да мне тоже очень интересно
(Offline)
 
Ответить с цитированием
Старый 27.01.2007, 19:54   #6
jimon
 
Сообщений: n/a
Re: Разработка сетевых игр

Michael
такой возможности (я в смысле получения таблицы серверов которые запущенны в интернете) нету
надо самому делать (ето я правильно понял ? вы типа про direct play и список серверов в инете)

так надо сделать php скриптик на сервере где нить
и он будет хранить список
ps. такой скриптик у меня есть
если надо - могу поделится
но ему надо php и mysql на сервере
 
Ответить с цитированием
Старый 27.01.2007, 23:46   #7
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Re: Разработка сетевых игр

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

че та я забросил тему, надо б исправить. (сам с собой)
(Offline)
 
Ответить с цитированием
Старый 30.07.2007, 19:14   #8
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,227
Написано 1,156 полезных сообщений
(для 4,107 пользователей)
Re: Разработка сетевых игр

Сообщение от jimon
ps. такой скриптик у меня есть
если надо - могу поделится
но ему надо php и mysql на сервере

Скриптик в студию )
(Offline)
 
Ответить с цитированием
Старый 31.07.2007, 14:37   #9
jimon
 
Сообщений: n/a
Re: Разработка сетевых игр

вот
 
Ответить с цитированием
Старый 31.07.2007, 23:23   #10
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,227
Написано 1,156 полезных сообщений
(для 4,107 пользователей)
Re: Разработка сетевых игр

Спасибо )
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 14:58   #11
shaman_al
Оператор ЭВМ
 
Регистрация: 13.04.2007
Сообщений: 25
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Разработка сетевых игр

Попробовал протестить эту игру по сети.
Результаты:
1) Противников не видно, видно только их название в центре карты.
2) При подключении хотбы 1 игрока начинает жутко тормозить и лагать.
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 17:58   #12
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Re: Разработка сетевых игр

Shaman_al. спасибо, но сейчас я уже ничего исправлять небуду. мне некогда.
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 18:17   #13
shaman_al
Оператор ЭВМ
 
Регистрация: 13.04.2007
Сообщений: 25
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Разработка сетевых игр

Жаль. Может тогда дашь ссылочку на другой рабочий пример сетевой игры? Хоть теже кубики чтобы перемещались...
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 18:20   #14
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Re: Разработка сетевых игр

likosoft.ucoz.ru
тут есть два сетевых проекта:
Flyer - леталка
_ISh - стрелялка.
вроде ОпенСоурс, если нет, то от второго могу исходники куданить залить. а по первому проведи поиск в разделе Blitz3D.
(Offline)
 
Ответить с цитированием
Старый 13.10.2007, 23:14   #15
Stabilitron
Нуждающийся
 
Аватар для Stabilitron
 
Регистрация: 30.06.2007
Сообщений: 52
Написано 9 полезных сообщений
(для 26 пользователей)
Re: Разработка сетевых игр

Не там не опенсурс=) выложи пожалуйста)
__________________
AircraftLanding
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка игр под Нокию beisik Прочие вопросы 20 25.05.2009 06:17
mGUI (Разработка) moka Библиотеки 30 30.10.2007 11:08
Позиционирование и разработка текстур? Delta_Q Создание текстур 5 22.10.2007 15:35
Реализация сетевых механизмов в играх и Blitz Armageddon 3D-программирование 1 08.01.2007 13:26


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


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