forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Помогите нубу! (http://forum.boolean.name/showthread.php?t=19883)

Mr_Maikl 30.06.2015 01:28

Помогите нубу!
 
Люди! Я занялся изучением Blitz'а совсем недавно, и заранее прошу меня извинить за, вероятно, глупый вопрос. Но я себе уже всю голову сломал, и не могу понять причины странного поведения переменных PozCyrX и PozCyrY.
Мне просто хочется понять причину, по которой переменные отказываются принимать значение меньшее объявленному в начале. И вообще странно себя ведут.... Помогите, а то сойду с ума....





Graphics3D 1920,1080,32,1
SetBuffer BackBuffer ()


Laits1=CreateLight()
kyrsor=LoadMesh("D:\Prog\Kyrsor4.b3d")
TextureGround=LoadTexture ("D:\Prog\Texture1.jpg")

PointRotate=CreatePivot()


MainCam=CreateCamera(PointRotate)


PozCyrX=0
PozCyrY=200


Color 0,200,0

VertCam#=160
SizeCyr#=1

RadCamX#=0
RadCamY#=0



PositionEntity Laits1,0,60,-70
PositionEntity MainCam,0,VertCam#,-160
RotateEntity MainCam,45,RadCamX#,0
MoveMarker=CreatePivot(Kyrsor)


ScaleTexture TextureGround,32,32


terrain=CreateTerrain( 32 )


ScaleEntity terrain,10,1,10



EntityTexture terrain,TextureGround



Repeat

PositionEntity PointRotate,PozCyrX,1,PozCyrY
PositionEntity MoveMarker,0,0,0
PositionEntity kyrsor,PozCyrX,1,PozCyrY

aX=MouseXSpeed()
aY=MouseYSpeed()

VertCam#=VertCam#+(MouseZSpeed()*3)


If MouseDown(2)=1 Then RadCamX#=RadCamX#-aX RadCamY#=RadCamY#+aY RotateEntity PointRotate ,RadCamY#,RadCamX#,0 RotateEntity Kyrsor ,0,RadCamX#,0 Goto lab1


MoveEntity MoveMarker,aX,0,aY-(aY*2)



PozCyrX=EntityX (MoveMarker,1)
PozCyrY=EntityZ (MoveMarker,1)




.lab1

ScaleEntity kyrsor,SizeCyr,SizeCyr,SizeCyr

SizeCyr#=SizeCyr#-0.01
If SizeCyr#<0.4 Then SizeCyr#=1


PositionEntity MainCam,0,VertCam#,-160


RenderWorld
UpdateWorld

Flip

Until KeyHit(1)

End

Nerd 30.06.2015 02:27

Ответ: Помогите нубу!
 
Цитата:

Сообщение от Mr_Maikl (Сообщение 297073)
Но я себе уже всю голову сломал, и не могу понять причины странного поведения переменных PozCyrX и PozCyrY.
Мне просто хочется понять причину, по которой переменные отказываются принимать значение меньшее объявленному в начале.

Может просто мышка доходит до края экрана?
Хз, код не особо читабельный.

St_AnGer 30.06.2015 08:58

Ответ: Помогите нубу!
 
Попробуй добавить в основной цикл
Код:

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
Этот код будет ставить курсор мышки в центр экрана, что бы он никуда не убежал и не упирался в края. Это позволил крутить её как хочешь
И ещё попробуй PozCyrX и PozCyrY объявить как дробные, то есть
Код:

PozCyrX#=0
PozCyrY#=200

Возможно ещё в этом беда зарыта

Посмотрел код, запустил, беда не в этом явно.

ABTOMAT 30.06.2015 10:55

Ответ: Помогите нубу!
 
Зашёл в топик, хотел помочь.

Код не оформлен как код — его трудно читать.
В коде используется goto — ещё труднее его читать.

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

В коде используется подгрузка каких-то файлов: моделей и текстур, очевидно, без них не заработает. Можно было бы все причендалы сложить в zip-архив и приложить к посту, чтобы желающие могли тут же запустить. Но нет, им придётся найти у себя что-то подобное, надо искать, надо складывать в папку.

Расхотел помочь. Думаю, не я один по причинам выше.

Arton 30.06.2015 15:31

Ответ: Помогите нубу!
 
Цитата:

Сообщение от St_AnGer (Сообщение 297075)
Попробуй добавить в основной цикл
Код:

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

Это не поможет т. к. после этого камера не двигается, или идёт очень редкими рывками (один раз даже повернулась чуть-чуть).
Код надо переделывать.

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

Учитывая что это не работает после установки курсора в центр экрана, у тебя присутствует привязка (или типа того) к координатам курсора. Но это неправильно. Нужно получать куда двигается мышь (курсор) и в ту сторону двигать камеру.

Пригодятся команды:
Код:

ProjectedX()
ProjectedY()
ProjectedZ()

Goto в главном цикле дурной тон.

P. S. Код не читал.

Mr_Maikl 30.06.2015 19:58

Ответ: Помогите нубу!
 
Цитата:

Сообщение от Nerd (Сообщение 297074)
Может просто мышка доходит до края экрана?
Хз, код не особо читабельный.

Да! Это оно самое! Я просто не допёр, по тому, что команда возвращает не координаты а смещение. Был уверен, что тут просто краёв не бывает... теперь всё работает как положено.

Цитата:

Сообщение от St_AnGer (Сообщение 297075)
Этот код будет ставить курсор мышки в центр экрана, что бы он никуда не убежал и не упирался в края. Это позволил крутить её как хочешь
И ещё попробуй PozCyrX и PozCyrY объявить как дробные, то есть
Код:

PozCyrX#=0
PozCyrY#=200

Возможно ещё в этом беда зарыта

Посмотрел код, запустил, беда не в этом явно.

Эти переменные изначально и были дробные) Просто это следы танцев с бубном вокруг них...

Цитата:

Сообщение от ABTOMAT (Сообщение 297076)
Зашёл в топик, хотел помочь.

Код не оформлен как код — его трудно читать.
В коде используется goto — ещё труднее его читать.

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

В коде используется подгрузка каких-то файлов: моделей и текстур, очевидно, без них не заработает. Можно было бы все причендалы сложить в zip-архив и приложить к посту, чтобы желающие могли тут же запустить. Но нет, им придётся найти у себя что-то подобное, надо искать, надо складывать в папку.

Расхотел помочь. Думаю, не я один по причинам выше.

Код не выделил. Мой косяк. Прошу прощения. Goto - для меня удобная команда. Я просто не знаю что в ней плохое. Просто я не знаю другой команды безусловного перехода... Подгрузка модели, там вообще любая модель сойдёт. Она у меня не анимирована. И текстура взята первая попавшаяся. Я просто не подумал, что кому-то они понадобятся. Могу выложить. В любом случае спасибо за ответ, и прошу извинения за потраченное время.

Цитата:

Сообщение от Arton (Сообщение 297077)
Это не поможет т. к. после этого камера не двигается, или идёт очень редкими рывками (один раз даже повернулась чуть-чуть).
Код надо переделывать.


Пригодятся команды:
Код:

ProjectedX()
ProjectedY()
ProjectedZ()

Goto в главном цикле дурной тон.

P. S. Код не читал.

Тут просто зависит в какое место кода вставлена строка. У меня всё попёрло на ура. На счёт пререписи кода, не судите строго. Это даже не программа, а попытка разобраться в языке.За Команды - спасибо, буду изучать.Goto - Я просто не в курсе почему оно дурной тон. Я как по другому перейти не знаю(((.

Всем огромное спасибо за помощ! Проблема решена, и мой мозг теперь в безопасности).

Arton 30.06.2015 23:02

Ответ: Помогите нубу!
 
Цитата:

Сообщение от Mr_Maikl (Сообщение 297082)
Goto - Я просто не в курсе почему оно дурной тон.

По этому и дурной тон. В будущем подобный скачок может запутать, когда код разрастётся.

Цитата:

Я как по другому перейти не знаю(((.
If

Вместо прыжка, логичнее будет ставить условие перехода.

И ещё, называй пожалуйста темы правильно, что бы название отражало суть.


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

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