Сообщение от AndruXa
Я имею ввиду полоску жизней игрока. Когда подбираеш бонус число жизней увеличивается, а полоска нет, пока бот в тебя не пальнет. Я хочу сделать прямую зависимость полоски от числа.
|
Щас напишу коечто что поидее исправит сею проблемму.
Ну покачто временно решил сделать по подобию того как после попадения пули в игрока оно обновлялось.(сделал пока что для НР и для НО, точнее не сделал а методом копи/пасте дополнил действия при подбирании бонуса)
на строку ниже после "user_H=user_H+20" (это у нас в "упдате юзер" если помните) добавь
Change_H(user_xline,user_H)
аналогичто на строку ниже после "user_H0=user_H0+15" добавь
Change_H(user_xline0,user_H0)
.
Так же где нибудь в начале "Function update_user()" добавь
Change_H(user_b_xline,user_inv\s[user_inv\current])
(эта строчка при старте игры обновит полоску боеприпасов, чтобы она сразу отображалась корректно, ато если изначально боезапас неполон то она отображается не корректно до первого выстрела.)
Ща еще пару сек и сделаю чтобы когда подбираеш бонус дающий пули то полоска означающая их максимум сразуже "пополнялась".
тэкс, короче так, в функции "Function update_user()" надо добавить еще 3 одинаковые строчки в 3 ифки подбирания бонуса к зарядам.
Вот это
"Change_H(user_b_xline,user_inv\s[user_inv\current])"
добавь в
If EntityCollided (user,TypeBonus_ammo_0) Then
PositionEntity Bonus_ammo_0,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[0]=user_inv\s[0]+6
EndIf
If user_inv\s[0]>shot_S(0)\max Then
user_inv\s[0]=shot_S(0)\max
EndIf
получится вот так:
If EntityCollided (user,TypeBonus_ammo_0) Then
PositionEntity Bonus_ammo_0,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[0]=user_inv\s[0]+6
;вот оно-
Change_H(user_b_xline,user_inv\s[user_inv\current])
;--------
EndIf
If user_inv\s[0]>shot_S(0)\max Then
user_inv\s[0]=shot_S(0)\max
EndIf
далее в
If EntityCollided (user,TypeBonus_ammo_1) Then
PositionEntity Bonus_ammo_1,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[1]=user_inv\s[1]+30
EndIf
If user_inv\s[1]>shot_S(1)\max Then
user_inv\s[1]=shot_S(1)\max
EndIf
будет сморется вот так:
If EntityCollided (user,TypeBonus_ammo_1) Then
PositionEntity Bonus_ammo_1,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[1]=user_inv\s[1]+30
;-----------
Change_H(user_b_xline,user_inv\s[user_inv\current])
;-----------
EndIf
If user_inv\s[1]>shot_S(1)\max Then
user_inv\s[1]=shot_S(1)\max
EndIf
и последнее
If EntityCollided (user,TypeBonus_ammo_2) Then
PositionEntity Bonus_ammo_2,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[2]=user_inv\s[2]+2
EndIf
If user_inv\s[2]>shot_S(2)\max Then
user_inv\s[2]=shot_S(2)\max
EndIf
станет выглядеть так:
If EntityCollided (user,TypeBonus_ammo_2) Then
PositionEntity Bonus_ammo_2,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[2]=user_inv\s[2]+2
Change_H(user_b_xline,user_inv\s[user_inv\current])
EndIf
If user_inv\s[2]>shot_S(2)\max Then
user_inv\s[2]=shot_S(2)\max
EndIf
Вот с чем я доси неразобрался, так это как к текущим НР ботов попривязывать полоски их НР...
Добавлено(1):
Щас будем сносить тот недо-прыжок какой я сделал ранее (там было слишком много нерабочего, и он был сам по себе какойто не такой) и ставить тот какой я сделал из прыжка impersonalis.
1. Такс короче добавляем новую константу:
2. Удаляем:
3. Удаляем в "Function update_user()":
pick_ent=LinePick(EntityX(user,1),EntityY(user,1),EntityZ(user,1),0,-3.6,0)
TranslateEntity user,0,user_vy#*delta_t,0,True
If pick_ent
jumping=0
Else
jumping=1
user_vy#=user_vy#-G#*delta_t
EndIf
4. Добавляем вместо того что удалили вот это:
pick_ent=LinePick(EntityX(user,1),EntityY(user,1),EntityZ(user,1),0,-3.6,0)
TranslateEntity user,0,user_vy#*delta_t,0,True
If pick_ent
jump_bool=False
Else
jump_bool=True
user_vy#=user_vy#-G#*delta_t;
EndIf
If KeyHit(57) And jump_bool=False Then user_vy#=jumpvel#*delta_t jump_bool=True
5. Удаляем в "While Not KeyHit(1)=1":
If jumping=0
If KeyDown(57) Then user_vy#=jumpvel# jumping=1
EndIf
If jumping=1
user_vy#=user_vy#-gravity#*delta_t
by#=by#+user_vy#
EndIf
If by#<1 Then jumping=0
6. Любуемся нормальным кодом (без лишних кусочков раскиданных повсюду) и плавным прыжком.
Добавлено(2): Ща чудю, мудрю, хочу сделать так чтобы был смысл игры, допустим, надо будет собирать определенный бонус за который будут давать очки, набрав определенное количество очков вы выигруете. Вот думаю, сделать чтоль чтото типо сложности игры, токо это надо делать кнопки... но всеравно ведь до кнопок дело дойдет... пока что сделаю только бонус, и реген НР тож сделаю, будет 1 НР раз в 2.5 сек, но после пополнения до 100 реген отключится.
Тэкс, щас добавим регенерацию.
1. Добавляем новую константу какая будет отвечать за промежуток времени между восстановлением НР:
2. Добавляем новую глобальную переменную какая будет содержать число восстанавливаемых жизней:
3. В "Type inventar" добавим еще 2 строчки:
Field regen_HP_Flag
Field last_regen_HP_time
4. В "Function update_user()" добавим перед "End Function"(дабы избежать путаници):
If user_inv\regen_HP_Flag=False And user_H>0 And user_H<100 Then
user_inv\Regen_HP_flag=True
user_H=user_H+user_H_regen
user_inv\last_regen_HP_time=MilliSecs()
Change_H(user_xline,user_H)
EndIf
If MilliSecs()-user_inv\last_regen_HP_time>regen_HP_time And user_inv\Regen_HP_flag=True Then
user_inv\Regen_HP_flag=False
EndIf
5. Смотрим что у нас получилось, для этого потеряйте в бою какоенибудь количество НР(чтобы было менее 100) и убегите от ботов.