forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Болтовня (http://forum.boolean.name/forumdisplay.php?f=25)
-   -   AudioSoft на Blitz'е (http://forum.boolean.name/showthread.php?t=389)

Kain 16.12.2005 00:04

тенк'с попробуем

Kain 17.12.2005 05:04

Скажите кто нить, каким образом организовать взаимодействие мышки на объект
(при наведении.... и т.д.)

jimon 17.12.2005 13:52

получаеш координаты мышки
myvar_x = MouseX()
myvar_y = MouseY()

ну и оперируеш

Kain 18.12.2005 01:19

Спасибо, но как раз до ентого я сама, а дальше че с координатами делать ? как или чем проверить попадание в объект ?

Kain 18.12.2005 07:37

млин фсё хотел уже пробовать игрушку креетить, вышел облом я не смог сделать поле 8х8 объемное ну вроде как шахм доска..... :SOS:

jimon 18.12.2005 12:42

как мы преобразовываем квадрат 1*1 в то что нам надо ? множим стороны на k

тоесть реальные координаты на екране будут такие

ето координаты верхнего левого угла :
x_real_start = x_in_dim * k
y_real_start = y_in_dim * k

ето координаты нижнего правого угла :
x_real_end = (x_in_dim+1) * k
y_real_end = (y_in_dim+1) * k



если k будет к примеру 20 то получится что квадратики со стороной 20 будут :)

а как проверять ?
Код:

if mousex() > (x_in_dim * k) and mousex()<((x_in_dim+1)*k) and mousey()>(y_in_dim * k) and mousey()<((y_in_dim+1)*k) then
....
end if

главное смотреть чтобы x_in_dim и y_in_dim невышли за рамки массива, я лично непарился и делел массив больше :)

ps. у тебя постановка задачи неправильная, или мышление неправильное :) небойся, с опытом приходит
ps2. найди какой нибудь пример простенькой игрушки, и попытайся зделать чтонибудь наподобе нее, если неполучается - смотри как делали в игре ;)

Kain 18.12.2005 20:44

Фсе окончательно запутался с етими координ.,
Какие ед изм в Blitz'e а то не пойму: конус одно, картинка вроде уже в пикселях, ни че не понимаю как их соединить ?
PS Спасибо за терпение...

jimon 18.12.2005 23:05

измерения в блице - mouse получается в пикселях :)
и все

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

Kain 19.12.2005 07:43

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

Kain 31.12.2005 03:25

Вложений: 1
jimon слушай подскажи че-нить можно с етим кодом сделать,
а то мне совсем не нравятся такие проблемы в начале пути.
Код:

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
Global fntArial=LoadFont("Arial",22)
SetFont fntArial
Global cam_pivot=CreatePivot()
        PositionEntity cam_pivot,10,0,10
        cam=CreateCamera(cam_pivot);камера
 PositionEntity cam,-15,15,-30
        light=CreateLight();свет
 LightColor light,255,255,255
 RotateEntity light,90,0,0

Global sph=LoadTexture("star.jpg")       
;Dim pole(7,7)

        For ty=0 To 7
 For tx=0 To 7
        sphere=CreateSphere(16)
        EntityTexture sphere,sph
        PositionEntity sphere,tx*3,0,ty*3
 Next
        Next
        While Not KeyHit(1)

 If KeyDown(200)=True        Then
        p$="Вверх"
        rot_c=rot_c+1
 EndIf
 If KeyDown(208)=True Then
        p$="Вниз"
        rot_c=rot_c-1
 EndIf
 If KeyDown(203)=True Then
        p$="Влево"
        yaw#=-3
 EndIf
 If KeyDown(205)=True Then
        p$="Вправо"
        yaw#=3
 EndIf
        TurnEntity cam_pivot,0,yaw#,0
 RotateEntity cam,rot_c,-20,0
 yaw#=0

        RenderWorld
; Text 10,51,"Box at 100,100 is RGB:" + ColorRed() + "," + ColorGreen() + "," + ColorBlue() + "!"
 Text 10,11,"Стрелка  " + p$
; Text 10,31,"index " + index
 Text 10,51,"FPS: "+MaxFPS + " FPS=" +FPS

        Flip()
        FPS=FPS+1       
 If mFPS<MilliSecs() Then
        mFPS=MilliSecs()+1000
        MaxFPS=FPS
        FPS=0
 EndIf       
        Wend
End

заодно прикреплю файлик(там бб и картинка(спрайт от ракеты)
Так вот проблема в FPS , а точнее в их кол-ве 7шт
у меня P2-434Мгц 16Video,128ram
ну не правильно что при создании 64 сфер обтянутых шкуркой,
такой загруз должен быть(даже на моём железе)
наверно можно по другому, но как ?
посему прошу наставлений...

:rolleyes: или Blitz простые вещи, тоже делает через не туда ? :)

jimon 31.12.2005 12:54

у тебя щетчик fps кривой до невозможности - и непашет
юзай мой :)

Код:

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Global fntArial=LoadFont("Arial",22)
SetFont fntArial
Global cam_pivot=CreatePivot()
        PositionEntity cam_pivot,10,0,10
        cam=CreateCamera(cam_pivot);êàìåðà
 PositionEntity cam,-15,15,-30

        light=CreateLight();ñâåò
 LightColor light,255,255,255
 RotateEntity light,90,0,0

        Global fps_buffer1%,fps_buffer2%,fps%

        Function fps()
        fps_buffer1%=fps_buffer1%+1:If MilliSecs()-fps_buffer2%>1000 Then:fps_buffer2%=MilliSecs():fps%=fps_buffer1%:fps_buffer1%=0:End If
        End Function

Global sph=LoadTexture("star.jpg")       

        sphere=CreateSphere()
;        HideEntity sphere

        For ty=0 To 7
 For tx=0 To 7
        sphere2=CopyEntity(sphere)
        EntityTexture sphere,sph
        PositionEntity sphere,tx*3,0,ty*3
 Next
        Next

        While Not KeyHit(1)

        fps()

 If KeyDown(200)=True        Then
        p$="Ââåðõ"
        rot_c=rot_c+1
 EndIf
 If KeyDown(208)=True Then
        p$="Âíèç"
        rot_c=rot_c-1
 EndIf
 If KeyDown(203)=True Then
        p$="Âëåâî"
        yaw#=-3
 EndIf
 If KeyDown(205)=True Then
        p$="Âïðàâî"
        yaw#=3
 EndIf

        TurnEntity cam_pivot,0,yaw#,0
        RotateEntity cam,rot_c,-20,0

        yaw#=0

 UpdateWorld
 RenderWorld
 Text 10,11,"Ñòðåëêà  " + p$
 Text 10,51,"FPS: "+fps

        Flip 0

        Wend
End

сорри руский текст в коде затрется - думаю для тебя непроблема востановить ? :(

ps. у меня ~560 - 600 фпс
проблемма была в том что ты создавал каждый раз новую сферу, да притом такую большую (помойму 256 полигонов в каждой)

и flip 0 надо ставить
и разрешение екрана лутче ставить 800*600 и в оконом режиме

Kain 07.01.2006 00:17

Вложений: 1
такая проблемка при кликах на правую кнопку мыши мерцает екран
(т.е. как будто один кадр смещен - "кадры бегут")
код не много урезан для форума, целиком в архиве
Код:

...
        While MouseDown(2); вращение игрового поля
 *
 *xs=MouseXSpeed()
 *If *GraphicsWidth() -1 <= MouseX() Then;переход границ экрана
 *        MoveMouse GraphicsWidth()-MouseX(),MouseY()       
 *        Else If MouseX() =< 0 Then
 *        MoveMouse GraphicsWidth() -1,MouseY()
 *End If
 *If *GraphicsHeight() -1 <= MouseY() Then
 *        MoveMouse MouseX(),GraphicsHeight()-MouseY()
 *        Else If MouseY() <= 0 Then
 *        MoveMouse MouseX(),GraphicsHeight()-1
 *End If *
 *rot_y=0
 *If xs<0 Then rot_y=rot_y+(2-xs/30)
 *If xs>0 Then rot_y=rot_y-(2+xs/30)
 *If xs<>0 Then *
 *        TurnEntity cam_pivot,0,rot_y,0
 *End If
 *fps()
 *UpdateWorld
 *RenderWorld
 *shinfo()
 *Flip
        Wend
End Function
....

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

PS кстати jimon насчет щетчика fps ты перебрал ето не мой(с форума)
во вторых показания примерно одинаковые (возможно на больших измерениях будет по другому у меня 25-30fps(434Мгц)после апгрейта проверю , так чё еще обсудим
объясни что дает flip 0
и моя проблема вроде (но 100% не говорю) была в большом количестве сегментов
(полигонов) сферы, flip и разрешение,режим екрана - больших скочков не давали

jimon 07.01.2006 14:57

обычно делают так :
Код:

Function povorot()

        zs#=MouseZSpeed ()       
        If MouseDown(3)=True Then zoom#=1
        If ZS=-1 Then zoom#=zoom#+0.1
        If ZS=1 Then zoom#=zoom#-0.1
        If zoom#<0.5 Then zoom#=0.5
        If zoom#>1.5 Then zoom#=1.5
 CameraZoom cam,zoom#
 
       

        If MouseDown(2) Then; âðàùåíèå èãðîâîãî ïîëÿ
 
 xs=MouseXSpeed()

 rot_y=0
 If xs<0 Then rot_y=rot_y+(2-xs/30)
 If xs>0 Then rot_y=rot_y-(2+xs/30)
 If xs<>0 Then
        TurnEntity cam_pivot,0,rot_y,0
 End If
       
        End If

        MoveMouse 400,300

        fps()
        UpdateWorld
        RenderWorld
        shinfo()
        Flip 0

End Function

400,300 - ето расширение екрана поделить на два .. просто мне влом было писать graphicswidth()/2 и тд :)

flip 0 рисует кадр без вертикальной синхронизации
тоесть есть писать flip до количество кадров в секунду ограничится частотой обновления екрана (у меня 100 герц к примеру)

impersonalis 07.01.2006 19:09

Писать надо: graphicswidth()*0.5
подробнее тут: http://community.boolean.name/index.php?showtopic=122

Kain 07.01.2006 20:34

impersonalis
Цитата:

Писать надо: graphicswidth()*0.5
подробнее тут: http://community.boolean.name/index.php?showtopic=122

между прочим ето я уже прочитал, и у меня не подтвердилось: / чуть-чуть выигрывало,
доберусь до оптимизации игры пообщаемся,ты бы лучше на письмо ответил !!!
Если совсем не понятен вопрос в письме , то кратко будет так :
" Вы можете из_менять код форума ? "
или по теме прокоментировал ,потому как я не понял почему кадры прыгали то

jimon так и не понял чё делает етот ноль (у меня тоже 100 Гц 1024*768 17" )
я так понял ты ответил на "MouseDown(2)" -- помогло
помнишь спрашивал про то как определить объект с помощью мышки
так вот ты вроде тогда мне про 2D писал, а 3D -- EntityZ(X,Y) пойдет ?

PS impersonalis как ты нашел не документированые функции ? и есть ли ещё ?


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

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