forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   кубик рубика (http://forum.boolean.name/showthread.php?t=13791)

WhiteBlack 27.11.2010 23:29

кубик рубика
 
Вложений: 1
если у кого-то есть свободное время и нечем заняться, посмотрите что здесь не так, я с этим сижу уже весь день, скоро стану вот таким - :crazy:
когда включите нажмите стрелку вправо; не обращайте внимания на большучесть кода в некоторых местах, это я оптимизирую, мне главное понять почему при повторном нажатии на стрелку вправа происходит.... то что происходит (я пробовал и translate и moveentity все равно двигает в одну и ту же сторону, ну вобщем гляньте кому не лень

DeeJex 27.11.2010 23:48

Ответ: кубик рубика
 

Давненько не видел такой быдлокод...

Цитата:

посмотрите что здесь не так
Вот что: для поворота кубов юзай пивоты и парентинг(читай про это в хелпе)

pepel 27.11.2010 23:50

Ответ: кубик рубика
 
чет способ ваще помоему ущербный

мне видится такая схема: вращать отдельные части левой кнопкой мыши, правой кнопкой вращать весь кубик
естессно вращать можно по 90 градусов

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

WhiteBlack 30.11.2010 13:55

Ответ: кубик рубика
 
сделал через пивоты, да полегче(намного), просто я планировал двигать каждый кубик, мне казалося так интереснее
осталася одна проблема
PHP код:

......
Global 
pivtop=CreatePivot()
.....
repeat
.....
 If 
KeyHit(205Then
      oldyaw
(1)=EntityYaw(pivtop)
      
flag=1
      
For i=1 To 9
       EntityParent
(cubes(i), pivtop)
      
Next
    End 
If
    
    
TurnPiv() 
.....
until keyhit(1)

Function 
TurnPiv()
    If 
flag=1 Then
       
If EntityYaw(pivright)<oldyaw(1)+90 Then
          TurnEntity pivright
00.50
       
Else
          
flag=0
       End 
If  
    
End If
End Function 

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

ABTOMAT 03.12.2010 23:10

Ответ: кубик рубика
 
Открой дебаггер и посмотри какие значения принимают переменные. Это поможет тебе понять, в чём дело.

WhiteBlack 04.12.2010 11:23

Ответ: кубик рубика
 
Цитата:

Сообщение от ABTOMAT (Сообщение 170794)
Открой дебаггер и посмотри какие значения принимают переменные. Это поможет тебе понять, в чём дело.

а где взять дебаггер? у меня был старый из твоих уроков по физиксу, но у меня стоит Windows 7 и он почему то не запускается, даже от администратора
(проблему с бесконечными поворотами я решил, но появились новые поэтому он бы мне помог)

baton4ik 04.12.2010 16:28

Ответ: кубик рубика
 
Не этот дебаггер. Поставь галочку у Program->Debug Enabled

WhiteBlack 04.12.2010 16:52

Ответ: кубик рубика
 
Цитата:

Сообщение от baton4ik (Сообщение 170856)
Не этот дебаггер. Поставь галочку у Program->Debug Enabled

а как это мне поможет, у меня же нет ошибки в синтаксе кода, она где то в логике
при повороте некоторые кубики имеют координаты по оси Х что то вроде 2,00445е-6.00
откуда это может браться?

baton4ik 04.12.2010 16:55

Ответ: кубик рубика
 
Вот это и надо смотреть дебаггером! Ставь брекпойнты и смотри значения переменных, таким образом ища логическую ошибку.

WhiteBlack 04.12.2010 20:27

Ответ: кубик рубика
 
Вложений: 1
вот что у меня получилось(во вложении)

так как код получился довольно большым, я не прошу вникать в код мне бы только узнать ваши предположения на счет появления координат у верхних кубиков
управление:
PHP код:

повороты по горизонтали:
P(англ)-влево       Х(русское)-вправо
Ж                        Э
Ю                        
,

по вертикали
U  и J
I и K
O и L 

попробуйте нажать "Х" несколько раз и посморите на координаты верхних кубиков там появляются странные координаты
(может это связано с припэрентиванием и отпэрениванием к пивотам??:dontknow: )

ABTOMAT 04.12.2010 20:29

Ответ: кубик рубика
 
WhiteBlack, ты делал то, что описано в посте №9 ?

WhiteBlack 04.12.2010 20:34

Ответ: кубик рубика
 
Цитата:

Сообщение от ABTOMAT (Сообщение 170887)
WhiteBlack, ты делал то, что описано в посте №9 ?

да, там какая то фигня извинюясь за выражение, дебаггер после нескольких поворотов говорит, что максимальное значение у из всех кубиков равно 520(хотя там же стоят кубики с Х=540), а "Y" становится 560 хотя должно быть 540

WhiteBlack 04.12.2010 21:16

Ответ: кубик рубика
 
полазил с дебаггером, нашел такую ерунду: после поворота ЗНАЧЕНИЕ координаты Y увеличивается на 10, при этом реальные координаты остаются прежними, то есть он никуда не сдвигается
при этом вспомнил, что у меня ест вот такая строчка
PHP код:

PositionEntity pivvertEntityX(cubes(5)), EntityY(cubes(5))+10EntityZ(cubes(5)) 

pivvert - это пивот, к которому припэрентиваются кубики
такое ощущение, что вот эта десятка прибавляется, но если ее не прибавлять, тогда пивот получается не по центру и кубики вращаются не точно
что то я не понал, если что то припэрентить, а потом отпэрентить, координаты вроде должны быть те же? или нет?

Crayzi 05.12.2010 22:39

Ответ: кубик рубика
 
Цитата:

Сообщение от WhiteBlack (Сообщение 170896)
что то я не понал, если что то припэрентить, а потом отпэрентить, координаты вроде должны быть те же? или нет?

Помойму блитз чуть неадэкватен в этом вопросе, юзай так - если хош глобальную координату то EntityX#(cubes(5),True), есди локальную то EntityX#(cubes(5),False).
Цитата из фака блитза:
Код:

EntityX# ( entity[,global] )
Параметры
entity = указатель объекта
global (не обязательно)= True для глобальных координат, False - для локальных. По умолчанию False.


RBK 06.12.2010 02:16

Ответ: кубик рубика
 
Запустил программу. После нескольких вращений кубик развалился.
Код слишком запутан. Попробуй вращать стороны с помощью отдельных
функций.


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

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