forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Уже наболевшее.. (http://forum.boolean.name/showthread.php?t=6097)

Samarik 10.07.2008 01:21

Уже наболевшее..
 
Доброго времени суток)
Речь пойдёт о прыжке, плавном прыжке..
Знаю, да, такие темы есть, всё описано, но так как написано в других темах, тупняк, заканчиваеца всё тем что каждый друг другу говорит что у нево неправильно, выкладывая свой неправильный пример и тд...

Вообщем я блиц юзаю около суток, поделал всякие примеры, понял принцип работы, делал фпс по уроку http://blitzetc.blitzmax.ru/index.ph...Person_Shooter , там в конце есть описание прыжка, но лучше сделать игру без прыжка чем с таким...

Видел тут темку "плавный прыжок"
Код:

Function UpdateJump(MovEnt,ObjFrom,JH)
jump_Speed=jump_speed-0.9
If jump_speed <=0 Then jump_speed = 0
If EntityCollided(MovEnt,ObjFrom) If KeyHit(57) Then
jump_speed=JH
End If
TranslateEntity MovEnt,0,jump_speed,0
End Function

с этим кодом, тут jump_Speed=jump_speed-0.9 при изменении меньше чем на 0,51 перс прос улетает вверх, вообщем эксперементировал и ничего не получаеццо.
За день пересмотрел много кодов прыжка, принцып понял, реализовать немогу, копипастить неумею, в моём примере не работает:))))
Да я нуб в блице, прошу помощщи))

ABTOMAT 10.07.2008 02:49

Ответ: Уже наболевшее..
 
Вложений: 1
Чел, я ж уже давал пример (выложу тут, может, кому-то поможет):
Вложение 4550
Тут все имхо понятно.
Есть вектор направления прыжка, который описывается всего одной переменной (т.к. прыжок происходит только по оси Y).
Когда игрок хочет прыгать, задаём этому вектору большое значение.
Этот вектор меняется в соответствии с силой тяжести (просто вычитаем каждый цикл из вектора число N)
И каждый цикл перемещаем игрока по этому вектору.
В результате игрок летит по параболе.
Когда игрок коллизится с землёй, перестаём его перемещать по вектору прыжка ибо он уже не прыгает.
Вообще, это элементарная кинематика из курса физики средней школы.
Ну что непонятного?

З.Ы. у тебя переменная jump_speed не дробная, потому и не получается. 0.51 округляется до 1, а всё, что меньше - до 0
надо так объявлять при первом использовании
jump_speed#=.....

jimon 10.07.2008 02:56

Ответ: Уже наболевшее..
 
Samarik
ты просто делаешь особую программерскую магию :lol:

H@NON 10.07.2008 11:55

Ответ: Уже наболевшее..
 
Вложений: 1
Вот писал когда-то, баловался. Там есть приличный прыжок от первого лица, можешь оттуда взять посмотреть.

ABTOMAT 10.07.2008 12:44

Ответ: Уже наболевшее..
 
H@NON, прыжок действительно приличный) :super:
Особенно когда чел приседает перед прыжком чтобы сильнее оттолкнуться.
Надо взять на заметку.

Samarik 11.07.2008 00:18

Ответ: Уже наболевшее..
 
Цитата:

Сообщение от jimon (Сообщение 82033)
Samarik
ты просто делаешь особую программерскую магию :lol:

Посмотри на свою клавиатуру (о_О)
H@NON, пасибо ща заценим..)
Всё, сори за шорох, разобрался, H@NON, в блице як таким кодам ещё не привык, так что пока не лез туда, но прыжок прикольный;)
АВТАМАТ, нащёт "jump_speed#" спс, оно мне и помогло, норм прыжок теперь:)

Samarik 11.07.2008 18:15

Ответ: Уже наболевшее..
 
небуду сорить в форуме, напишу тут..

у меня проблема с реализацией частиц, проблема состоит в том что я немогу сделать так чтоб частицы летели из бота, в которого я попал.
создал я частицы, они работают, создал условие что при коллизии пули с ботом летят частицы, всё это работает..
добился того что при колизии пули с ботом вылазит ошибка "ентити даз нот ексист.." ну эт када я пробовал с командами EntityX(Bot),y,z и тд..

выложу код частиц
Код:

Type blood_particle

Field x#,y#,z#
Field speed#
Field life#
Field particle_type

End Type

Function Create_blood(x#,y#,z#,col)

For i=1 To col
e.blood_particle=New blood_particle
e\x=x
e\y=y
e\z=z
e\speed=Rnd(-2,2)
e\life=40

e\particle_type=LoadSprite("tex/blood_particle.png")
ResetEntity e\particle_type
PositionEntity  e\particle_type,x,y,z
TurnEntity e\particle_type,Rnd(360),Rnd(360),Rnd(360)
Next

End Function

Function Update_blood()

For w.blood_particle=Each blood_particle
MoveEntity w\particle_Type,0,0,w\speed
w\life=w\life-1

If w\life<=0 Then
FreeEntity w\particle_type
Delete w
EndIf

Next

End Function

описывал так:
bot_h=EntityCollided(a\entity,BOTT)

If bot_h Create_Blood(EntityX(Bot),EntityY(Bot),EntityZ(Bot ),100)

ну, это уже я эксперементировал с тем что неполучаеца:)))

забыл упоммянуть, скок раз непытался реализовать частицы леели с центра координат сцены..

H@NON 11.07.2008 19:26

Ответ: Уже наболевшее..
 
делай так:
If bot_h<>0 then Create_Blood(EntityX(bot_h,1),EntityY(bot_h,1),Ent ityZ(bot_h,1 ),100)

Команда EntityCollided() возвращает ентити, с которым столкнулись.

Samarik 11.07.2008 19:28

Ответ: Уже наболевшее..
 
спасибо большое;)

ABTOMAT 11.07.2008 22:02

Ответ: Уже наболевшее..
 
Цитата:

If bot_h Create_Blood(EntityX(Bot),EntityY(Bot),EntityZ(Bot ),100)
Чего у тебя разные хендлы?
По идее если сколлизился Bot_h то и создавать нужно по его координатам а не по какому-то Bot

FrankH 11.07.2008 22:30

Ответ: Уже наболевшее..
 
Пример обработки снарядов, только вместо коллизии ентитипик.
Код:

Function UpdateIonShot()

    For all.plasma_shots=Each plasma_shots
    all\life=all\life-1
    TranslateEntity all\mesh,all\tx#*dt#,all\ty#*dt#,all\tz#*dt#,1
        ob=EntityPick (all\mesh,5);              ----------------Zamenit'!!!!!!!
        If ob>0 Then
            If GetEntityType (ob)=2 Then
                If all\typ=1 LP#=GP1_power# Else If all\typ=2 LP#=GP2_power# Else If all\typ=3 LP#=GP3_power# Else If all\typ=4 LP#=GP4_power# Else If all\typ=5 LP#=GP5_power#
                u.Unit=Object.Unit(EntityName(ob))
                u\health#=u\health#-(LP#*.01*(100-u\shield));If u\plr=0
                u\speed#=u\speed#*.6

                CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPitch(all\mesh),20)
                CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPitch(all\mesh),20)
                CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPitch(all\mesh),20)
                CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPitch(all\mesh),20)
                CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPitch(all\mesh),20)
                CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPitch(all\mesh),20)

            EndIf
        EndIf
    If (all\life<=0) Or (ob) Then FreeEntity all\mesh Delete all
    Next
   
End Function

ну и спарки при пикании бота
Код:

Function CrtPShotSpark(boat,vecy=0,vecp=0,ang=0,spd#=3,min#=2,max#=4)
            splasher.PShotSpark=New PShotSpark
            splasher\parent=boat
            splasher\sprite=CopyEntity(PShotSparkspr)
            RotateEntity splasher\sprite,vecp+Rnd(-ang,ang)-180,vecy+Rnd(-ang,ang),0
                splasher\scale#=min#;Rnd(min#,max#)
                splasher\spd#=spd#;+mass
            ScaleEntity splasher\sprite,splasher\scale#,splasher\scale#,splasher\scale#*3
            PositionEntity splasher\sprite,EntityX(splasher\parent,True),EntityY(splasher\parent,True),EntityZ(splasher\parent,True)
End Function

может пригодится, спарки выглядят имхо неплохо.

H@NON 11.07.2008 22:46

Ответ: Уже наболевшее..
 
помойму вместо:
Цитата:

CtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPi tch(all\mesh),20)
CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityP itch(all\mesh),20)
CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityP itch(all\mesh),20)CrtPShotSpark(all\mesh,EntityYaw (all\mesh),EntityPitch(all\mesh),20)
CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityP itch(all\mesh),20)
CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityP itch(all\mesh),20)
лучше писать :
For n = 1 to 6
CtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPi tch(all\mesh),20)
Next
;)

FrankH 11.07.2008 22:53

Ответ: Уже наболевшее..
 
Цитата:

Сообщение от H@NON (Сообщение 82100)
помойму вместо:

лучше писать :
For n = 1 to 6
CtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPi tch(all\mesh),20)
Next
;)

Это был простой копипаст, и не редактировался, потому как частицы будут по иному реализованы..

Samarik 12.07.2008 12:04

Ответ: Уже наболевшее..
 
Цитата:

ну и спарки при пикании бота
и что оно делает?

ещё один фокус....
эта.. ну.эта:)
хачу немного теории..
вот бегаю я бью кубики.. толком нич в игре нет, в том числе и толком игры. 59-60 фпс, колеблица, тока поставлю Flip(0) то фпс 1к+
вот это, оно что такова делает, когда просто флип, стабилизируется фпс в проге? или обьясните мне что это такое..:)

и ещё вот, заметил, то что у мня было зa-delta_time-ировано:), работает нормально как при 1к так и при 60фпс, а вот кодик с пыжком неполучаеца уравновесить, *delta_time "пихал" уже куда угодно, настройки мутил, пробовал разные комбинации, немогу никак стабилизировать чтоб было как при 60 так и при 1к фпс..

Код:

Function UpdateJump(MovEnt,ObjFrom,JH#)
jump_Speed=jump_speed-0.1
If jump_speed <=0 Then jump_speed = 0
If EntityCollided(MovEnt,ObjFrom) If KeyHit(57) Then
jump_speed=JH
End If
TranslateEntity MovEnt,0,jump_speed,0
End Function

я тут немогу именно разобраца к чему дельтатайм прикрутить..:)))
или на словах обьясните, чтоб следующую мою проблему (а она есть) чтоб уже сам решил:)

шото смайликов у мня в посте дохрена..

ABTOMAT 12.07.2008 14:56

Ответ: Уже наболевшее..
 
Вложений: 1
Flip 1 - вертикальная синхронизация, Flip 0 - отсутствие оной.

Код:

Function UpdateJump(MovEnt,ObjFrom,JH#)
jump_Speed=jump_speed-0.01*dt
If jump_speed <=0 Then jump_speed = 0
If EntityCollided(MovEnt,ObjFrom) If KeyHit(57) Then
jump_speed=JH
End If
TranslateEntity MovEnt,0,jump_speed*.1*dt,0
End Function

М.Б. так? (если не будет работать, то надо уже в демке смотреть)

Вот ещё семпл наваял:


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot