Показать сообщение отдельно
Старый 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)