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=1994)

Тарас Шевченко 26.11.2006 19:21

Исправьте код
 
Вложений: 2
Привет всем. Учу Блитц 3Д и для изучения решил написать простенькую стрелялку дабы набраться опыта.
1 - Посмотрите мой код и скажите как сделать чтобы анимация останавливалась.
2 - Подскажите как сделать поворот мышкой? И пробовал типа if mouse(x) но у меня чето не выходит.

Хочу камеру на подобии GTA: San Andreas.

НУБ 27.11.2006 18:16

Re: Исправьте код
 
Ты волшебное слово забыл :)

Diplomat 27.11.2006 18:18

Re: Исправьте код
 
1.За анимацию отвечает отдельный кусок кода. Клавишами лишь задавай ему режимы работы.
Код:

AnimMode=0
IF KeyDown(Key)=1 THEN ;Move
    MoveEntity...
    AnimMode=1
END IF
IF AnimMode=0 THEN Animate... ;Idle anim
IF AnimMode=1 THEN Animate... ;Move anim

2.
Код:

TurnEntity Entity, MouseYSpeed()*SensY, MouseXSpeed()*SensX,-EntityRoll(Entity)
В дисциплинарном плане:
0. Темы мусолились на форуме не раз. Достаточно заюзать Поиск
1. Не надо флудить. Если не отвечают- значит ответят позже. Если позже не ответили- значит такой был вопрос.

Удач!

P.S. 2НУБ: Опередил меня! Волшебное слово было "ВПОИСКБЫСТРОНАХ!!!", я полагаю? :)

jimon 27.11.2006 18:24

Re: Исправьте код
 
для людей же зделано
http://boolean.name/showthread.php?t=15


млин опередили меня :)

Тарас Шевченко 02.12.2006 18:20

Re: Исправьте код
 
Для поворота мышкой пробовал:
If MouseX()>0 Then
TurnEntity cub,0,-1,0
Else
TurnEntity cub,0,1,0
EndIf

получилось, но когда поворачиваешь поворот не останавливается. Что делать?

jimon 02.12.2006 18:32

Re: Исправьте код
 
не MouseX а там команда со скоростью ... MouseXSpeed вроде или чето того

KRIK 02.12.2006 22:19

Re: Исправьте код
 
Мне кажется (если я тебя прально понял) тебе стоит после

Repeat


Написать следующий код:
Код:

angy#=-MouseYSpeed()*0.1
TurnEntity cam,angy#,0,0
angx#=-MouseXSpeed()*0.1
TurnEntity cub,0,angx#,0
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5

Далее я думаю тебе не составит труда поставить ограничения по осям, да и скорость вращения.

HolyDel 03.12.2006 13:52

Re: Исправьте код
 
Цитата:

Сообщение от Тарас Шевченко
Для поворота мышкой пробовал:
If MouseX()>0 Then
TurnEntity cub,0,-1,0
Else
TurnEntity cub,0,1,0
EndIf

получилось, но когда поворачиваешь поворот не останавливается. Что делать?

как ЭТО могло получится.
я в ШОКЕ.
я так понимаю, это куб поворачивается в одну сторону если мыш прижат к левой стенке монитора и в другую если не прижат
:DF 20 F4 20 D8 CE CA C5 20 CD C0 D5 2E:

KRIK 03.12.2006 16:14

Re: Исправьте код
 
2HolyDel
Ну чё тут удивляться-то ??? Человек начал изучать БЛИТС.. А при начале изучения можно ещё и не такое написать! ;)

Тарас Шевченко 06.12.2006 15:18

Re: Исправьте код
 
Мышкой попробую сам разобраться, а остановку анимации ну хоть убейте - не могу! Помогите исправьте сам код чтобы у вас все работало, а я что только не делал. Плиз, помогите!

Тарас Шевченко 06.12.2006 20:13

Re: Исправьте код
 
Цитата:

Сообщение от KRIK
Мне кажется (если я тебя прально понял) тебе стоит после

Repeat


Написать следующий код:
Код:

angy#=-MouseYSpeed()*0.1
TurnEntity cam,angy#,0,0
angx#=-MouseXSpeed()*0.1
TurnEntity cub,0,angx#,0
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5

Далее я думаю тебе не составит труда поставить ограничения по осям, да и скорость вращения.

Да, спасибо KRIK, это именно то, что мне нужно! Но как поставить ограничения по осям? C можешь переделать мой код, чтобы например при отпускании клавиши вперед анимация ходьбы отключалась?

impersonalis 06.12.2006 20:27

Re: Исправьте код
 
запутался в коде =/

KRIK 06.12.2006 21:23

Re: Исправьте код
 
2Тарас Шевченко
Код:


angy#=-MouseYSpeed()*0.2
m=m+angy#
If m>20 Then m=20
If m<-20 Then m=-20
RotateEntity cam,m,0,0
angx#=-MouseXSpeed()*0.1
TurnEntity cub,0,angx#,0
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5

Вот тут ограничения по оси У! Чтобы изменить ограничение поменяй в условии с переменной m (где написанно 20) на любое нужное число.
На счёт анимации, надо глянуть, ща времени нет.

Тарас Шевченко 06.12.2006 22:48

Re: Исправьте код
 
2 KRIK: спасибо! Как будет время помоги с анимацией.

HolyDel 07.12.2006 03:04

Re: Исправьте код
 
If KeyHit(17) Animate cub,2,.5,walk
If KeyHit(31) Animate cub,2,.5,walk
If KeyDown(17)=0 And KeyDown(31)=0 And AnimSeq(cub)<>stand And AnimSeq(cub)<>shot Then Animate cub,2,.3,stand
If Animating(cub)=0 Then Animate cub,2,.3,stand
If MouseHit(1) Animate cub,3,.5,shot

Тарас Шевченко 08.12.2006 22:42

Re: Исправьте код
 
2 HolyDel: Большое спасибо, всё работает так как мне и надо было!

Тарас Шевченко 17.12.2006 20:11

Re: Исправьте код
 
Как сделать при нажатии левой кнопки мышки звук выстрела который бы проигрывался один раз?

Тарас Шевченко 17.12.2006 20:16

Re: Исправьте код
 
Вложений: 2
Еще вопрос: Вот мой код, как сделать меню? Желательно объяснение исходником. Нужно чтобы была картинка и кнопочки Новая игра и Выход.
Заранее спасибо!

HolyDel 18.12.2006 02:42

Re: Исправьте код
 
про звук:
как вариант через MouseHit.
if MouseHit(1) then chm=playsound(shoot)
хотя мне больше нравится так
reload_time=reload_time+1
if reload_time>6 and mousedown(1)
chm=playsound(shoot)
reload_time=0
endif
;ето типа автомат: пух пух пух.
про мену тока завтра и то имхо.

Тарас Шевченко 18.12.2006 17:16

Re: Исправьте код
 
2 HolyDel: Пасибо! С меню кто-нить поможет?

HolyDel 19.12.2006 02:59

Re: Исправьте код
 
Можно выкладывать КОМПИЛИРУЕМЫЙ исходник? (c) Impersonalis
с необходимой медиа?

Тарас Шевченко 19.12.2006 22:14

Re: Исправьте код
 
Вложений: 2
Вот держите с ресурсами. Внимание: у мну проблемы с инетом и из-за этого текстуры урезанны до безобразия! Кто будет качать скажите скоко у вас выдает FPS.

HolyDel 21.12.2006 01:14

Re: Исправьте код
 
Вложений: 2
ВОТ:

Тарас Шевченко 21.12.2006 14:15

Re: Исправьте код
 
Большое спасибо! А как сделать чтобы при выстреле у меня работала анимация? Я сам пробовал вот так:
;Стрельба
If MouseHit(1)Animate robot,3,.5,shotAnd create_shot(EntityX(robot),1,EntityZ(robot),Entity Pitch(cam),EntityYaw(robot) - 90,0)

Но так анимация глючит.

Тарас Шевченко 21.12.2006 19:18

Re: Исправьте код
 
Вложений: 2
Вот такая штука происходит если навести курсор на картинку с черным цветом и действует только на черный цвет. Как это исправить?

HolyDel 21.12.2006 23:07

Re: Исправьте код
 
CLS поставь после FLIP.
или MaskImage fon,42,56,11 - установить другой прозрачный цвет

Тарас Шевченко 22.12.2006 14:21

Re: Исправьте код
 
Спасибо! А как там с анимацией и выстрелом? И как сделать чтобы игра и ресурсы грузились не в меню, а после нажатия новая игра?

Platon 22.12.2006 14:43

Re: Исправьте код
 

Тарас Шевченко
А что значит слово "Актион" на скрине? :)

Тарас Шевченко 22.12.2006 15:42

Re: Исправьте код
 
Ну актион типа экшен (action), просто так назвал.

Diplomat 22.12.2006 16:30

Re: Исправьте код
 
Платон, не заморачивайся. Просто наслаждайся представлением! :D

HolyDel 23.12.2006 03:00

Re: Исправьте код
 
у тебя ж вроде и так почти все грузится после нажатия "новая игра"?
перенеси всю загрузку медиа после Wend цикла обработки менЮ.

Тарас Шевченко 23.12.2006 10:59

Re: Исправьте код
 
А да всё правильно, я просто музыку грузил перед созданием менюшки. Спасибо.

Тарас Шевченко 23.12.2006 14:45

Re: Исправьте код
 
А как реализовать систему сохранения и загрузки и чтобы можно было нажать escape вернуться в меню и сохраниться или загрузить, а игра в это время была на паузе.

Horror 23.12.2006 19:59

Re: Исправьте код
 
у тебя когда на шифт нажимаешь чел идет без анимации когда на w с анимацией! зачем? типо бег??
попробуй так
Код:

Function updateplayer()
V#=0.5
If MouseHit(1)
create_shot(EntityX(robot),1,EntityZ(robot),EntityPitch(cam),EntityYaw(robot) - 90,0)
If AnimSeq(robot)<>an2 Then Animate robot,3,1,an2;CTPEJIb6A
EndIf
;42=shift 17=w 30=a 31=s 32=d
If KeyDown(17) Or KeyDown(31) Or KeyDown(30) Or KeyDown(32)
If KeyDown(17)
If KeyDown(42)
If AnimSeq(robot)<>an1 Then Animate robot,1,1,an1 ;6er
MoveEntity robot,V#*2,0,0
Else
If AnimSeq(robot)<>an1 Then Animate robot,1,0.5,an1 ;][ogb6A
MoveEntity robot,V#,0,0
EndIf
EndIf
If KeyDown(31)
If AnimSeq(robot)<>an1 Then Animate robot,1,0.5,an1 ;HA3ag
MoveEntity robot,-V#,0,0
EndIf
If KeyDown(30)
If AnimSeq(robot)<>an1 Then Animate robot,1,0.5,an1 ;JIEBO
MoveEntity robot,0,0,V#
EndIf
If KeyDown(32)
If AnimSeq(robot)<>an1 Then Animate robot,1,0.5,an1 ;npaBo
MoveEntity robot,0,0,-V#
EndIf
Else
If AnimSeq(robot)<>an3 Then Animate robot,1,0.5,an3 ;CTOuT
EndIf
End Function

B main()
Код:

updateplayer()
ПС я типо тоже начинающий) но код у меня работает если что))
а на твой вопрос про паузу тоже хотелбы узнатть ответ !
буду ждать...

HolyDel 23.12.2006 20:05

Re: Исправьте код
 
насчет пузы:
[blitz]
if keyhit(25) ;P
pause=1
endif
while pause
text 400,300,"ПАУЗА, БЛИН",1,1
flip
if keyhit(25) then pause=0
wend
[/blitz]
должно работать, хотя пысалось в браузере, поэтому ХЗ

HolyDel 23.12.2006 20:07

Re: Исправьте код
 
насчет сохранения.
придется писать в файл, есть команды WriteFile, ReadFile, ReadByte и т.д.
придтся сохранять в файл все значимые параметры, и при загрузке восставнавливат их.

Тарас Шевченко 24.12.2006 01:19

Re: Исправьте код
 
HolyDel Если я понял правильно тебя то надо зафиксировать последние игровые события и записать в файл. Но как работать этими командами WriteFile, ReadFile, ReadByte? Подскажи.

HolyDel 24.12.2006 01:31

Re: Исправьте код
 
ну, просто для паузы нерационально записывать в файл, и геморно и непроизводительно, а для сохранения самое то.
для примера:
e=writefile("save.acs")
writefloat e,entityx(player)
writefloat e,entityz(player)
writefloat e,entityz(player)
writefloat e,entityyaw(player)
closefile e
ето мы открывпем файл, записываем инфу о объектке, хзакрывем файл.
для загрузки
e=readfile("save.acs")
positionentity player,readfloat(e),readfloat(e),readfloat(e)
rotateentity player,0,readfloat(e),0
closefile e

Тарас Шевченко 24.12.2006 01:35

Re: Исправьте код
 
Так как мне для моего кода применить? Мне надо создавать функцию создания игрока? Если не трудно помоги.

HolyDel 24.12.2006 01:51

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

Тарас Шевченко 24.12.2006 12:25

Re: Исправьте код
 
Вложений: 2
Да код в принципе прежний, у меня там выстрел с анимацией барахлит.

;Стрельба
If MouseHit(1)Animate robot,3,.5,shotAndcreate_shot(EntityX(robot),1,EntityZ(robot),Entity Pitch(cam),EntityYaw(robot) - 90,0)

Закоментируй так, чтобы было просто и ясно

Тарас Шевченко 24.12.2006 20:23

Re: Исправьте код
 
2 HolyDel Попробовал сам, но не очень
;Сохранение
If KeyDown(63) e=WriteFile("save.txt") WriteFloat e,EntityX(robot) WriteFloat e,EntityZ(robot) WriteFloat e,EntityZ(robot) WriteFloat e,EntityYaw(robot) CloseFile e
If KeyDown(67) b=ReadFile("save.txt") PositionEntity robot,ReadFloat(b),-.9,ReadFloat(b) RotateEntity robot,0,ReadFloat(b),0 CloseFile b

Когда загружаю игрок позиция таже только по X и Z, а по Y другая вот и написал: ReadFloat(b),-.9

А как у тебя дела с сохранением обстоят?


HolyDel 24.12.2006 20:28

Re: Исправьте код
 
If KeyDown(63) e=WriteFile("save.txt")
WriteFloat e,EntityX(robot)
WriteFloat e,EntityZ(robot)
WriteFloat e,EntityZ(robot)
WriteFloat e,EntityYaw(robot) CloseFile e
коммнетаории излишне.

Тарас Шевченко 24.12.2006 23:33

Re: Исправьте код
 
Так у меня ведь тоже самое.

jimon 25.12.2006 00:12

Re: Исправьте код
 
выделеную Z в коде HolyDel'а замени на Y
если додумаешся зачем - напиши

HolyDel 25.12.2006 01:09

Re: Исправьте код
 
у мну в 38-ом посте опечатка.

Тарас Шевченко 25.12.2006 14:55

Re: Исправьте код
 
Ну заменил я и тоже самое как и было у меня.

Horror 25.12.2006 21:31

Re: Исправьте код
 
вот твое + еще коечто+F1-сохранить F2-загрузить P-посмотри пауза:
http://horror-mania.narod.ru/ACTION.rar
че непонятно? даже я понял))

impersonalis 26.12.2006 03:55

Re: Исправьте код
 
faq
http://www.boolean.name/showthread.php?t=1060
:(( и никто не вспомнил

Тарас Шевченко 26.12.2006 19:53

Re: Исправьте код
 
2 Horror: Спасибо конечно, но я не говорил что я чего-то не понял.

Тарас Шевченко 06.01.2007 01:24

Re: Исправьте код
 
Пробовал сделать прыжок (для этого нужна гравитация), но все мои попытки были тщетны. Код здесь http://horror-mania.narod.ru/ACTION.rar

Progger_Leo 12.01.2007 15:51

Re: Исправьте код
 
Вот из одного учебника по блицу:

Код:


Физическая модель прыжка
;Теперь добавим возможность прыжка. Для этого необходимо ввести
; еще одну переменную - ry#, а также приращение dy#:
ry# = -8
dy# = 0
 
;Затем, вводим условие: если нажата клавиша "пробел" и робот
; стоит на земле (т.е. координата ry# = -8), то задаем импульс
; - приращение, равное 2
If KeyDown(57) Then
If ry# = -8 Then dy# = 2
End If
 
;Прибавляем к переменной ry# приращение:
ry# = ry# + dy#
 
;Но, т. к. на робота должна действовать гравитация, мы должны
; периодически уменьшать приращение на 0.1:
dy# = dy# - 0.1
 
;Причем, координата робота ry# не должна быть меньше -8
; (робот не должен опускаться ниже плоскости), поэтому
; введем следующее условие:
If ry# < -8 Then ry# = -8: dy# = 0
 
robot = LoadAnimMesh( "C:\media\standing.3ds" )
LoadAnimSeq robot, "C:\media\running.3ds"
ScaleEntity robot, 0.4, 0.4, 0.4
 
rx# = 10
ry# = -8
rz# = 0
dy# = 0
ang = 90
 
Repeat
 
PositionEntity robot, rx#, ry#, rz#
RotateEntity robot, 0, ang + 90, 0
PointEntity cam, robot
If KeyDown(57) Then
If ry# = -8 Then dy# = 2
End If
ry# = ry# + dy#
dy# = dy# - 0.1
If ry# < -8 Then ry# = -8: dy# = 0
 
If KeyDown(200)
If AnimSeq(robot) = 0 Then Animate robot, 1, 0.5, 1, 10
rx# = rx# + Cos(ang) * 0.5
rz# = rz# + Sin(ang) * 0.5
Else
If AnimSeq(robot)=1 Then Animate robot, 2, 1, 0, 10
End If
If KeyDown(203) Then ang = ang + 5
If KeyDown (205) Then ang = ang - 5
If KeyDown(1) Then Exit
UpdateWorld
RenderWorld
Flip
Forever

---
* правка jimon : так лутче imho

CRACK 15.02.2007 20:32

Re: Исправьте код
 
Эта модель не подходит для нормального гэйма, так как она не отображает возможность между колизией уровня и игрока, а только с плоскостью, ну например если ты захочешь запрыгнуть на ящик, то ты провалишься в него( ну в целом заморочек с коллизеей там намного больше чем просто запрыгнуть на ящик).
Я тоже самое пытался сделать, но вот никак не могу допытаться нормального прыжка. Пытался сделать сделать через EntityCollided но что-то не вышло, если можете, помогите пожалуйста...

Тарас Шевченко 15.02.2007 23:09

Re: Исправьте код
 
Делай столкновения игрока с землей, а после Repeat что-то пиши:

MoveEntity player,0,-1,0 ; Это будет притягивать игрока к поверхности, а коллизии не дадут ему провалится.

Введи переменные положения игрока например:

x#=0
y#=0
z#=0

А при прыжке просто прибавляй к переменной y# прибавляй число, но только чтобы в сумме с гравитацией значение больше 0.

If KeyDown(57) Then y#+2

Я так делал у меня перс и нормально прыгал и запригивал на ящики, но есть одно если не отпускать клавишу переменная будет прибавлятся и прибавлятся, а при If KeyHit(57) персы не прыгает.

Надеюсь разберешься.

Вопрос знатокам: это способ с коллизией не будет затормаживать игру?

CRACK 16.02.2007 16:13

Re: Исправьте код
 
Вот в том-то и дело что будет прибавляться бесконечно, и это не катит! А вот как сделать так чтобы нельзя было ещё раз нажать, пока он не приземлится, if Not Collided, может поможет, хотя врядли....

Colossus 21.11.2008 14:03

Ответ: Исправьте код
 
прыжок сделать впринципе не трудно)

можно попробывать кой чего)

ну графитация у нас есть ну и ладно

если KeyHit(57) то чубрик летит вверх
если расстояние от земли то плеера больше например 5 то задаем челу приземление)

nikerban 21.07.2010 12:02

Ответ: Исправьте код
 
можно например сделать типа этого.
y#=0
If KeyDown(57) Then y#=+0.3
moveentity cam,0,-0.05,0
if 0.4<y# then moveentity cam,0,-100,0
if 0.4>y# then moveentity cam,0,0.05,0
типа я так придумал)

Arton 21.07.2010 12:12

Ответ: Исправьте код
 
Цитата:

Сообщение от nikerban (Сообщение 155786)
можно например сделать типа этого.
y#=0
If KeyDown(57) Then y#=+0.3
moveentity cam,0,-0.05,0
if 0.4<y# then moveentity cam,0,-100,0
if 0.4>y# then moveentity cam,0,0.05,0
типа я так придумал)

Аргх!!! Когда будем смотреть на дату сообщений!!! Некропостер, блин!!! :wild: >>:(

Человеку уже сто лет это ненужно!!!

Nuprahtor 21.07.2010 12:14

Ответ: Исправьте код
 
Человек хотя-бы помочь хочет, а что сделали Вы?

Arton 21.07.2010 12:31

Ответ: Исправьте код
 
Цитата:

Сообщение от Nuprahtor (Сообщение 155788)
Человек хотя-бы помочь хочет, а что сделали Вы?

Когда могу, помогаю... Но не там где человек несколько лет назад спрашивал...

P.S. Что, Nuprahtor, тоже надоело как новичков некропостерами называют...
Мне тоже...
Ещё достаёт когда не по делу несколько постов подряд от одного пользователя...

P.P.S. Больше тут писать не буду, если кто то захочет подискутировать - в ЛыСы!

nikerban 21.07.2010 12:47

Ответ: Исправьте код
 
хаха и правдо незаметил ну лано мож кто потом посмотрит понадобиться=))));)
если считаете,что я тупой то извините

Arton 21.07.2010 13:01

Ответ: Исправьте код
 
Цитата:

Сообщение от nikerban (Сообщение 155799)
хаха и правдо незаметил ну лано мож кто потом посмотрит понадобиться=))));)
если считаете,что я тупой то извините

Лично я тебя невнимательным считаю. Я очень удивился когда в новых сообщениях увидел тему который вчера не было, а в ней уже 4 страницы :4to:

P.S. А ведь сказал что не буду больше тут писать :)

Program23 22.07.2010 11:24

Ответ: Исправьте код
 
Вложений: 1
вот тебе это поможет
Вложение 10795

Reizel 22.07.2010 12:13

Ответ: Исправьте код
 
Очень прошу помощи. Вот код:
Graphics3d 0,0,32,1
setbuffer backbuffer()

cam=createcamera()
repeat
Update()
renderworld
flip
until keyhit(1)

function Update()
end function


подправьте его пожалуйста, чтоб там мужики бегали, стреляли...


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

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