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

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

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

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

Ответ
 
Опции темы
Старый 06.04.2012, 09:14   #1
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Дубликат в дубликате

Я создаю врагов и мне нужно заставить их стрелять не зависимо друг от друга, но что-то нефига не работает, помогите найти ошибку
Вот код:

Основной код:
;--begin--;
Graphics3D 640,480,16,1
SetBuffer BackBuffer()
;--begin--;

Include "functions.bb" 

;--constants--;
Global health%=100;--health
Global pl_sp#=0.5;--player`s speed
Global half_pl_sp#=0.25;--1/2 player`s speed
Global gravity# = 0.09;--gravity
Global yspeed#=0;--player`s veltical speed
Global jspeed# = 1.4;--jump speed
Global simp_m=1;--one-key movement
Global weapon=1;--type of weapon
Global move=1

Global w_s1=1;--action weapon 1
Global w_s2=1;--action weapon 2

Global gun_b1%=100;--weapon 1 ammo
Global gun_b2%=50;--weapon 2 ammo

Global h_m#=0.08;--veltical speed objects
Global h_dir#=-0.005;--direction with speed

Global en_wait=10
;--constants--;

;--images--;
health_im=LoadImage("textures\health.bmp")
el_gun_ammo=LoadImage("textures\el_gun_ammo.bmp")
pl_gun_ammo=LoadImage("textures\pl_gun_ammo.bmp")
;--images--;

;--sounds--;
gun_s1=LoadSound("sounds\gun1.ogg")
;--sounds--;

;--collision types--;
Global TYPE_PLAYER=1, TYPE_BULLET=2, TYPE_WALL=3, TYPE_HEALTH=4, TYPE_IMP_AMMO=5, TYPE_PL_AMMO=6, TYPE_EN_BULLET=7
;--collision types--;

;--types--;
Type T_bullet
	Field ent
	Field time
End Type

Type T_aspirin
	Field ent
End Type

Type T_plasma
	Field ent
End Type

Type T_impulse
	Field ent
End Type

Type T_bullet_en
	Field ent
	Field time
End Type

Type T_enemy
	Field ent
End Type
;--types--;

;--sprites--;
Global shot1=LoadSprite("textures\shot1.bmp")
ScaleSprite shot1,3,3
EntityRadius shot1,1.5
EntityType shot1,TYPE_BULLET
HideEntity shot1

Global shot2=LoadSprite("textures\shot2.bmp")
ScaleSprite shot2,3,3
EntityRadius shot2,1.5
EntityType shot2,TYPE_BULLET
HideEntity shot2

Global shot_en1=LoadSprite("textures\shot3.bmp",2)
ScaleSprite shot_en1,5,5
EntityRadius shot_en1,1.5
EntityType shot_en1,TYPE_EN_BULLET
HideEntity shot_en1
;--sprites--;

;--main--;
pln=CreatePlane()
PositionEntity pln,0,-1,0
EntityType pln,TYPE_WALL
EntityColor pln,50,100,150

Global player=CreateSphere()
PositionEntity player,0,10,50
EntityRadius player,4
EntityType player, TYPE_PLAYER
EntityAlpha player,1

Global cam=CreateCamera()
EntityParent cam,player
PositionEntity cam,0,5,0

Global enemy=LoadMesh("models\level1\enemy1.3ds")
PositionEntity enemy,-5,10,-5
ScaleEntity enemy,0.5,0.5,0.5
;--main--;

;--models--;
gun1=LoadMesh("models\level1\gun1.3ds")
ScaleEntity gun1,0.05,0.05,0.05
EntityParent gun1,cam
PositionEntity gun1,-1,-3,3
RotateEntity gun1,0,-90,0
HideEntity gun1
EntityOrder gun1,-1

gun2=LoadMesh("models\level1\gun2.3ds")
ScaleEntity gun2,0.05,0.05,0.05
EntityParent gun2,cam
PositionEntity gun2,-2,-7,0
RotateEntity gun2,0,-90,0
HideEntity gun2
EntityOrder gun2,-1

Global h_asp=LoadMesh("models\level1\health.3ds")
ScaleEntity h_asp,0.25,0.25,0.25
EntityType h_asp, TYPE_HEALTH
HideEntity h_asp
EntityFX h_asp,1

Global pl_am=LoadMesh("models\level1\pl_am.b3d")
ScaleEntity pl_am,0.1,0.1,0.1
EntityType pl_am, TYPE_PL_AMMO
EntityFX pl_am,1
HideEntity pl_am

Global im_am=LoadMesh("models\level1\im_am.b3d")
ScaleEntity im_am,0.1,0.1,0.1
EntityType im_am, TYPE_IMP_AMMO
PositionEntity im_am,5,1,5
EntityFX im_am,1
HideEntity im_am

;--models--;

;--pivots--;
Global piv_fire=CreatePivot()
EntityParent piv_fire,cam
PositionEntity piv_fire,-1.5,-1.5,8

;--pivots--;

;--collisions--;
Collisions TYPE_PLAYER, TYPE_WALL, 2, 3
Collisions TYPE_BULLET, TYPE_WALL, 2, 3
Collisions TYPE_PLAYER, TYPE_HEALTH, 2, 3
Collisions TYPE_PLAYER, TYPE_IMP_AMMO, 2, 3
Collisions TYPE_PLAYER, TYPE_PL_AMMO, 2, 3
Collisions TYPE_PLAYER, TYPE_EN_BULLET, 2, 3
;--collisions--;

;--creations--;
CreateFirstAid()
CreateImpulseAmmo()
CreatePlasmaAmmo()
CreateEnemy()
;--creations--;

;-------------------------------------------------------------

While Not KeyHit(1)

;-------------------------------------------------------------

;--enemy fire waiting--;
en_wait=en_wait-1
If en_wait<0
	CreateEnemyBullet.T_bullet_en()
	en_wait=20
EndIf
;--enemy fire waiting--;

If KeyHit(18)
	health=health-1
EndIf

;--death--;
If health<=0
	health = 0	
	move=0
	PositionEntity cam,0,-2,0
	RotateEntity cam,0,0,-80
	HideEntity gun1
	HideEntity gun2
EndIf
;--death--;

;--changing direction Y movement objects--;
h_m=h_m+h_dir		
If h_m<-0.08
	h_dir=0.005
ElseIf h_m>0.08		
	h_dir=-0.005
EndIf	
;--changing direction Y movement objects--;

;--FIRE!!!--;
If move=1
	If MouseHit(1)
		If weapon=1
			If w_s1=1
				gun_b1=gun_b1-1
				CreateBullet()
				PlaySound gun_s1
			EndIf
		ElseIf weapon=2
			If w_s2=1
				gun_b2=gun_b2-1
				CreateBullet()
				PlaySound gun_s1
			EndIf
		EndIf
	EndIf
EndIf
;--FIRE!!!--;

;--changing weapon--;
If move=1
	wheel=MouseZSpeed()
	If wheel=-1
		weapon=weapon+1
		If weapon=3
			weapon=1
		EndIf
	ElseIf wheel=1
		If weapon=1
			weapon=3
		EndIf
		weapon=weapon-1
	EndIf

	If weapon=1
		ShowEntity gun1
		HideEntity gun2
	ElseIf weapon=2
		ShowEntity gun2
		HideEntity gun1
	EndIf
EndIf
;--changing weapon--;

;--ammo limit--;
If gun_b1=0
	w_s1=0
Else
	w_s1=1
EndIf

If gun_b1>200
	gun_b1=200
EndIf

If gun_b2=0
	w_s2=0
Else
	w_s2=1
EndIf

If gun_b2>100
	gun_b2=100
EndIf
;--ammo limit--;

;--bullet movement--;
For ex_bul.T_bullet = Each T_bullet
	UpdateBullet(ex_bul)
Next

For ex_bul_en.T_bullet_en = Each T_bullet_en
	UpdateEnemyBullet(ex_bul_en)
Next
;--bullet movement--;

;--first aid actions--;
UpdateFirstAid(ex_asp.T_aspirin)
;--first aid actions--;

;--impulse ammo actions--;
UpdateImpulseAmmo(ex_im.T_impulse)
;--impulse ammo actions--;

;--plasma ammo actions--;
UpdatePlasmaAmmo(ex_pl.T_plasma)
;--plasma ammo actions--;

;--jump--;
JumpPlayer()
;--jump--;

;--player`s movement--;
MovementPlayer()
;--player`s movement--;

;--enemy`s movement--;
UpdateEnemy(ex_en.T_enemy)
;--enemy`s movement--;

UpdateWorld()
RenderWorld()

;--ammo indicator--;
If weapon=1
	DrawImage el_gun_ammo,540,430
	Text 575,450,Str(gun_b1)
ElseIf weapon=2
	DrawImage pl_gun_ammo,540,430
	Text 575,450,Str(gun_b2)
EndIf
;--ammo indicator--;

;--health indicator--;
DrawImage health_im,0,430
Text 55,450,Str(health)
;--health indicator--;

Flip

Wend

End
Функции:

Function MovementPlayer()
	If move=1
;--movement--;
		If simp_m=1
			If KeyDown(17) MoveEntity player,0,0,pl_sp
			If KeyDown(31) MoveEntity player,0,0,-pl_sp	
			If KeyDown(30) MoveEntity player,-pl_sp,0,0
			If KeyDown(32) MoveEntity player,pl_sp,0,0
		EndIf

		If KeyDown(17) And KeyDown(30)
			simp_m=0
			MoveEntity player,-half_pl_sp,0,half_pl_sp
		ElseIf KeyDown(17) And KeyDown(32)
			MoveEntity player,half_pl_sp,0,half_pl_sp
			simp_m=0
		ElseIf KeyDown(31) And KeyDown(30)
			MoveEntity player,-half_pl_sp,0,-half_pl_sp
			simp_m=0
		ElseIf KeyDown(31) And KeyDown(32)
			MoveEntity player,half_pl_sp,0,-half_pl_sp
			simp_m=0
		Else
			simp_m=1
		EndIf
;--movement--;

;--free look--;
		TurnEntity player, 0, 0 -MouseXSpeed()*0.1, 0
		TurnEntity cam, MouseYSpeed()*0.1, 0, 0			
		MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
		RotateEntity cam, EntityPitch#(cam), 0, 0
;--free look--;
	EndIf
End Function

;-------------------------------------------------------------

Function JumpPlayer()
;--gravity--;
	yspeed=yspeed-gravity
	TranslateEntity player,0,yspeed,0
;--gravity--;

;--jump--;
	coll = EntityCollided(player,TYPE_WALL)
	If coll
		collide_y = CollisionNY(player,CountCollisions(player) )  
		If 0<collide_y
			yspeed=0
			jump=1
		Else
			jump=0
		EndIf
	Else
		jump=0
	EndIf
;--jump--;

	If move=1
;--jump on--;	
		If jump=1
			If KeyDown(57)
				yspeed = jspeed
			EndIf
		EndIf
;--jump on--;
	EndIf	
End Function

;-------------------------------------------------------------

Function CreateBullet.T_bullet()
	ex_bul.T_bullet = New T_bullet
	ex_bul\time = 150
	If weapon=1	
		ex_bul\ent = CopyEntity(shot2,piv_fire)
	ElseIf weapon=2
		ex_bul\ent = CopyEntity(shot1,piv_fire)
	EndIf
	EntityParent ex_bul\ent,0
	Return ex_bul
End Function

;-------------------------------------------------------------

Function UpdateBullet(ex_bul.T_bullet)
	ex_bul\time = ex_bul\time-1
	MoveEntity ex_bul\ent,0,0,5
	If ex_bul\time<=0 Or EntityCollided(ex_bul\ent,TYPE_WALL)
		FreeEntity ex_bul\ent
		Delete ex_bul
		Return
	EndIf
End Function

;-------------------------------------------------------------

Function CreateFirstAid()
	ex_asp.T_aspirin = New T_aspirin
	ex_asp\ent = CopyEntity(h_asp)
	NameEntity (ex_asp\ent,Handle(ex_asp))
	PositionEntity ex_asp\ent,20,0,0

	ex_asp.T_aspirin = New T_aspirin
	ex_asp\ent = CopyEntity(h_asp)
	NameEntity (ex_asp\ent,Handle(ex_asp))
	PositionEntity ex_asp\ent,40,0,0

	ex_asp.T_aspirin = New T_aspirin
	ex_asp\ent = CopyEntity(h_asp)
	NameEntity (ex_asp\ent,Handle(ex_asp))
	PositionEntity ex_asp\ent,60,0,0
End Function

;-------------------------------------------------------------

Function UpdateFirstAid(ex_asp.T_aspirin)
	For ex_asp.T_aspirin = Each T_aspirin
		TurnEntity ex_asp\ent,0,2,0	
		MoveEntity ex_asp\ent,0,h_m,0
	Next
	Local asp_col% = EntityCollided(player,TYPE_HEALTH)
	If(asp_col<>0)
		If health<100
			ex_asp.T_aspirin = Object.T_aspirin(EntityName(asp_col))
			FreeEntity(asp_col)
			Delete(ex_asp)
			health=health+20
		EndIf
	EndIf
End Function

;-------------------------------------------------------------

Function CreateImpulseAmmo()
	ex_im.T_impulse = New T_impulse
	ex_im\ent = CopyEntity(im_am)
	NameEntity (ex_im\ent,Handle(ex_im))
	PositionEntity ex_im\ent,20,2,20
	
	ex_im.T_impulse = New T_impulse
	ex_im\ent = CopyEntity(im_am)
	NameEntity (ex_im\ent,Handle(ex_im))
	PositionEntity ex_im\ent,40,2,20
	
	ex_im.T_impulse = New T_impulse
	ex_im\ent = CopyEntity(im_am)
	NameEntity (ex_im\ent,Handle(ex_im))
	PositionEntity ex_im\ent,60,2,20
	
	ex_im.T_impulse = New T_impulse
	ex_im\ent = CopyEntity(im_am)
	NameEntity (ex_im\ent,Handle(ex_im))
	PositionEntity ex_im\ent,80,2,20
	
	ex_im.T_impulse = New T_impulse
	ex_im\ent = CopyEntity(im_am)
	NameEntity (ex_im\ent,Handle(ex_im))
	PositionEntity ex_im\ent,100,2,20
End Function

;-------------------------------------------------------------

Function UpdateImpulseAmmo(ex_im.T_impulse)
	For ex_im.T_impulse = Each T_impulse
		TurnEntity ex_im\ent,0,2,0	
		MoveEntity ex_im\ent,0,h_m,0
	Next
	Local im_col% = EntityCollided(player,TYPE_IMP_AMMO)
	If(im_col<>0)
		If gun_b1<200
			ex_im.T_impulse = Object.T_impulse(EntityName(im_col))
			FreeEntity(im_col)
			Delete(ex_im)
			gun_b1=gun_b1+50
		EndIf
	EndIf
End Function

;-------------------------------------------------------------

Function CreatePlasmaAmmo()
	ex_pl.T_plasma = New T_plasma
	ex_pl\ent = CopyEntity(pl_am)
	NameEntity (ex_pl\ent,Handle(ex_pl))
	PositionEntity ex_pl\ent,20,2,40

	ex_pl.T_plasma = New T_plasma
	ex_pl\ent = CopyEntity(pl_am)
	NameEntity (ex_pl\ent,Handle(ex_pl))
	PositionEntity ex_pl\ent,40,2,40

	ex_pl.T_plasma = New T_plasma
	ex_pl\ent = CopyEntity(pl_am)
	NameEntity (ex_pl\ent,Handle(ex_pl))
	PositionEntity ex_pl\ent,60,2,40
	
	ex_pl.T_plasma = New T_plasma
	ex_pl\ent = CopyEntity(pl_am)
	NameEntity (ex_pl\ent,Handle(ex_pl))
	PositionEntity ex_pl\ent,80,2,40

	ex_pl.T_plasma = New T_plasma
	ex_pl\ent = CopyEntity(pl_am)
	NameEntity (ex_pl\ent,Handle(ex_pl))
	PositionEntity ex_pl\ent,100,2,40

	ex_pl.T_plasma = New T_plasma
	ex_pl\ent = CopyEntity(pl_am)
	NameEntity (ex_pl\ent,Handle(ex_pl))
	PositionEntity ex_pl\ent,120,2,40
End Function

;-------------------------------------------------------------

Function UpdatePlasmaAmmo(ex_pl.T_plasma)
	For ex_pl.T_plasma = Each T_plasma
		TurnEntity ex_pl\ent,0,2,0	
		MoveEntity ex_pl\ent,0,h_m,0
	Next
	Local pl_col% = EntityCollided(player,TYPE_PL_AMMO)
	If(pl_col<>0)
		If gun_b2<100
			ex_pl.T_plasma = Object.T_plasma(EntityName(pl_col))
			FreeEntity(pl_col)
			Delete(ex_pl)
			gun_b2=gun_b2+10
		EndIf
	EndIf
End Function

;-------------------------------------------------------------

Function CreateEnemyBullet.T_bullet_en()
	ex_bul_en.T_bullet_en = New T_bullet_en
	ex_bul_en\time = 150
	ex_bul_en\ent = CopyEntity(shot_en1,ex_en)
	RotateEntity ex_bul_en\ent,0,180,0
	PositionEntity ex_bul_en\ent,-3.5,-1.5,-3
	EntityParent ex_bul_en\ent,0
	Return ex_bul_en
End Function

;-------------------------------------------------------------

Function UpdateEnemyBullet(ex_bul_en.T_bullet_en)
	ex_bul_en\time = ex_bul_en\time-1
	MoveEntity ex_bul_en\ent,0,0,1
	If ex_bul_en\time<=0 Or EntityCollided(ex_bul_en\ent,TYPE_WALL) Or EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
		FreeEntity ex_bul_en\ent
		Delete ex_bul_en
		Return
	EndIf
	If EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
		health=health-5
	EndIf
End Function

;-------------------------------------------------------------

Function CreateEnemy()
	ex_en.T_enemy = New T_enemy
	ex_en\ent = CopyEntity(enemy)
	NameEntity (ex_en\ent,Handle(ex_en))
	PositionEntity ex_en\ent,-5,10,-15
	
	ex_en.T_enemy = New T_enemy
	ex_en\ent = CopyEntity(enemy)
	NameEntity (ex_en\ent,Handle(ex_en))
	PositionEntity ex_en\ent,-5,10,-25
	
	ex_en.T_enemy = New T_enemy
	ex_en\ent = CopyEntity(enemy)
	NameEntity (ex_en\ent,Handle(ex_en))
	PositionEntity ex_en\ent,-5,10,-35
	
	ex_en.T_enemy = New T_enemy
	ex_en\ent = CopyEntity(enemy)
	NameEntity (ex_en\ent,Handle(ex_en))
	PositionEntity ex_en\ent,-5,10,-45
End Function

;-------------------------------------------------------------

Function UpdateEnemy(ex_en.T_enemy)
	For ex_en.T_enemy = Each T_enemy
		PointEntity ex_en\ent,player
		TurnEntity ex_en\ent,0,181.5,0
	Next
End Function
(Offline)
 
Ответить с цитированием
Старый 08.04.2012, 09:33   #2
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Дубликат в дубликате

Код запустить не получилось, т.к. нет медии твоей.
Несколько слов всё же скажу.
Вот есть полёт снарядов:
Function UpdateEnemyBullet(ex_bul_en.T_bullet_en)
	ex_bul_en\time = ex_bul_en\time-1
	MoveEntity ex_bul_en\ent,0,0,1
	If ex_bul_en\time<=0 Or EntityCollided(ex_bul_en\ent,TYPE_WALL) Or EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
		FreeEntity ex_bul_en\ent
		Delete ex_bul_en
		Return
	EndIf
	If EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
		health=health-5
	EndIf
End Function
Есть две проверки на коллизию с игроком, причём после первой пуля удаляется. А потом та же пуля снова участвует в проверке. Вряд ли так ты отнимешь жизни игрока.

Ещё есть в главном цикле обновление врагов:
;--enemy`s movement--;
UpdateEnemy(ex_en.T_enemy)
;--enemy`s movement--;
И сама функция:
Function UpdateEnemy(ex_en.T_enemy)
	For ex_en.T_enemy = Each T_enemy
		PointEntity ex_en\ent,player
		TurnEntity ex_en\ent,0,181.5,0
	Next
End Function
И что же ты туда передаёшь за экземпляр типа такой с именем ex_en?
У тебя эта переменная нигде не объявлена, но используется во многих местах. Я думаю что проблема как раз в этой переменной.
Не передавай ничего в функцию UpdateEnemy().

Хоть это и блиц, но использовать конструкцию [Local имя_переменной] желательно.

Например вот тут что хранит ex_en?
Function CreateEnemyBullet.T_bullet_en()
	ex_bul_en.T_bullet_en = New T_bullet_en
	ex_bul_en\time = 150
	ex_bul_en\ent = CopyEntity(shot_en1,ex_en)
	RotateEntity ex_bul_en\ent,0,180,0
	PositionEntity ex_bul_en\ent,-3.5,-1.5,-3
	EntityParent ex_bul_en\ent,0
	Return ex_bul_en
End Function
Пройди поиском по коду и увидишь, что ты её используешь сначала как ex_en.T_enemy а потом как числовой parent в ex_bul_en\ent = CopyEntity(shot_en1,ex_en). Т.к. область видимости разная, тебе это сходит с рук.

Можешь заменить внутри функций эту переменную на другую, или перед циклом
For ex_en.T_enemy = Each T_enemy ......
написать
Local ex_en.T_enemy
и далее твой цикл с перебором врагов.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Devilox (08.04.2012)
Старый 08.04.2012, 17:15   #3
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Дубликат в дубликате

С уроном, от выстрела врага, я разобрался, спасибо
А вот с дубликатами пока никак не получается
Я написал Local ex_en.T_enemy, но результата нет...
Вот исходник:


Странно, недавно я убрал одну проверку коллизий с игроком - всё работало, а сейчас - нет, притом, что я больше ничего не изменял...
Вложения
Тип файла: rar Game_ex.rar (216.0 Кб, 449 просмотров)

Последний раз редактировалось Devilox, 08.04.2012 в 17:18. Причина: опять не работает...
(Offline)
 
Ответить с цитированием
Старый 08.04.2012, 17:27   #4
Markova
ПроЭктировщик
 
Аватар для Markova
 
Регистрация: 11.10.2011
Адрес: Мурманск
Сообщений: 154
Написано 74 полезных сообщений
(для 218 пользователей)
Ответ: Дубликат в дубликате

Не ну правильно, зачем ты дублируешь:
Function UpdateEnemy(ex_en.T_enemy)
Она вообще не нужна тут;Local ex_en.T_enemy
	For ex_en.T_enemy = Each T_enemy
		PointEntity ex_en\ent,player
		TurnEntity ex_en\ent,0,181.5,0
	Next
End Function
Прикольное что-то делаешь
__________________
Острый психоз- это когда вы разговариваете с кошкой.
Острый галлюцинаторный психоз - вы говорите с кошкой, которой не существует.
Паранойя - вы боитесь ляпнуть лишнего при кошке.
Шизофрения - иногда у вас появляется кошка, которая разговаривает.
Неврастения - вы жалуетесь кошке, она молчит, игнорирует вас и это для вас невыносимо!!!
Навязчивый невроз - вы уверены, что кошка не одна и они что-то замышляют!
(Offline)
 
Ответить с цитированием
Старый 08.04.2012, 17:51   #5
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Дубликат в дубликате

Но ведь всё равно это не решает проблему...
(Offline)
 
Ответить с цитированием
Старый 09.04.2012, 04:57   #6
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Дубликат в дубликате

Ты имел ввиду ошибку "Duplicate variable name"?
У меня тоже так получилось, когда открыл твой код. Начал разбираться и получил вот что:
1. Переименовал переменную, на которую ругался - не помогло.
2. Переименовал в несусветное имя, которое явно не используется нигде - не помогло.
3. Переименовал саму функцию - та же ошибка!
4. Закомментировал вызов этой функции - UpdateEnemy() - та же ошибка!

Чё за нафиг? Понял что проблема в том что файлы без сохранения изменений компилятся.
Переоткрыл IDE (visual blitz ide использую) и всё заработало нормально.
Выходит, что ИДЕ заглючила (у обоих нас, подозрительно).

Прикреплю на всякий .bb файлы новые.
Вложения
Тип файла: zip Game_ex.zip (3.5 Кб, 450 просмотров)
(Offline)
 
Ответить с цитированием
Старый 09.04.2012, 16:53   #7
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Дубликат в дубликате

EntityCollided всё равно не работает, исправил на EntityDistance и собрал главную программу и функции в один файл, а то глючит даже EntityDistance

Однако, со стрельбой врагов так и не разобрался...
Никак не могу понять, как заставить переменную в одной функции с переменной в другой функции...
Сам по себе выстрел отлажен, но стреляет только образец врага, притом, что если всё-таки написать команду "дублироваться в объекте ex_en", то Blitz не ругается, а просто дублирует из координат образца выстрела...
Вложения
Тип файла: rar Game_ex.rar (215.7 Кб, 433 просмотров)
(Offline)
 
Ответить с цитированием
Старый 10.04.2012, 05:28   #8
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Дубликат в дубликате

Поделал я твою игрушку на досуге. Поправил то что тебе нужно.
Сделано:
- пушки стреляют все, и только если игрок приблизится на определённое расстояние
- пушки убивают игрока
- игрок убивает пушки (после смерти они полупрозрачными становятся)

Теперь по коду. Конструкции типа
UpdateEnemy(ex_en.T_enemy)
....
Function UpdateEnemy(ex_en.T_enemy)
	For ex_en.T_enemy = Each T_enemy
		PointEntity ex_en\ent,player
		TurnEntity ex_en\ent,0,181.5,0
	Next
End Function
я заменил на
UpdateEnemies()
....
Function UpdateEnemies()
	Local ex_en.T_enemy
	For ex_en.T_enemy = Each T_enemy
		PointEntity ex_en\ent,player
		TurnEntity ex_en\ent,0,181.5,0
	Next
End Function
не вижу смысла в такие функции извне что-то передавать (во всяком случае на данном этапе).

Про коллизии. У тебя в игрока враг не попадал из-за неправильно назначенной коллизии, ты написал:
Collisions TYPE_PLAYER, TYPE_EN_BULLET, 2, 3
обрати внимание на порядок типов коллизии. Нужно поменять их местами:
Collisions TYPE_EN_BULLET, TYPE_PLAYER, 1, 1
т.к. первым должен идти тип того объекта, который сталкивается, а вторым того, с которым. (или нет? доку я перечитывать не стал, откуда-то помню такое просто)
Если бы ты игроком нарвался на пулю, идя на врага, то сработало бы и это.
Плюс к тому метод коллизии можно поставить 1: ellipsoid-to-ellipsoid collisions, и решение для коллизий тоже в 1: stop , т.к. пуля и игрок в виде эллипсоида колизятся, и двигать после столкновения ничего не нужно - снаряд просто удаляется сразу.

Подбирание оружие и аптечек я думаю лучше сделать через EntityDistance, думаю что быстрее работать будет (инфа не 100%).
Плюс проходить сквозь них игрок сможет, не подбирая, а то щас при здоровье в 100 сквозь аптечку не пролезешь, сдвигается игрок по коллизии.

Пушки я расставил в цикле, т.к. они в ряд просто пока что.

Там где исправлял что-то, поставил комментарий ";+++", но не везде т.к. мест стало много и мне надоело отвлекаться на проставление этих комментов.
Вложения
Тип файла: zip Game_ex.zip (3.6 Кб, 417 просмотров)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Devilox (10.04.2012)
Старый 10.04.2012, 16:59   #9
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Дубликат в дубликате

Спасибо большое, всё работает, сейчас буду досконально разбираться, как работает этот код
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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