Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 10.02.2013, 22:21   #1
ligala
AnyKey`щик
 
Регистрация: 10.02.2013
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Перемещение объектов

Помогите пожалуйста. Необходимо создать несколько объектов (к примеру 5), чтобы при клики на одном из них он выделялся (менял цвет, типа активный, либо рамка появлялась). Затем, при клике в любой части экрана, данный объект начинал туда перемещаться.
Я новичок в этом деле... написал, что-то типа такого

Graphics3D 840,580

SetBuffer BackBuffer()

kr1=0; 
kr2=0; 

cam=CreateCamera()

PositionEntity cam,0,5,0

 
lit=CreateLight()

cur=CreateSphere(8)

EntityColor cur,255,215,0

PositionEntity cur,0,1,15

EntityPickMode cur, 2
NameEntity cur, "cur1" 

cur2=CreateSphere(8)

EntityColor cur2,55,55,55

PositionEntity cur2,0,5,20

EntityPickMode cur2, 2
NameEntity cur2, "cur22" 

;pln=CreatePlane()

;tex=LoadTexture("floor.jpg")

;ScaleTexture tex,10,10

;EntityTexture pln,tex

Repeat

If MouseHit(1) = True
   pos = CameraPick(cam,MouseX(),MouseY())

   If pos
           name$ = EntityName(pos)
           If name = "cur1"
              EntityColor cur, 155,155,155
                kr1=1
      
           If name = "cur22"
              EntityColor cur2, 100,100,210
                kr2=1

           EndIf

           EndIf

        
   EndIf
EndIf
    
    If MouseHit(2) = True And kr1=1

        mh%=MouseX()
        mj%=MouseY()
        mk%=MouseZ() 

        MoveEntity cur,mh*.01,mj*0.01,0

    EndIf
    
    If MouseHit(2) = True And kr2=1

        mh%=MouseX()
        mj%=MouseY()
        mk%=MouseZ() 

        MoveEntity cur2,mh*.01,0,-mj*0.01

    EndIf

UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End
Создал две сферы, одна выделяется вторая нет... Движения как такового тоже нет. Сфера перепрыгивает не совсем понятно куда.
Помогите пожалуйста реализовать, лучше не используя тот бред, который я написал. Кстати, пришлось использовать правую кнопку мыши (MouseHit(2)) левая почему то не срабатывала вообще. Спасибо!

Последний раз редактировалось SBJoker, 11.02.2013 в 23:45.
(Offline)
 
Ответить с цитированием
Старый 11.02.2013, 08:01   #2
Shtamp
AnyKey`щик
 
Аватар для Shtamp
 
Регистрация: 10.02.2013
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Перемещение объектов

вместо mousehit() лучше использовать Getmouse()
Эм, если будет время отпишусь)
(Offline)
 
Ответить с цитированием
Старый 11.02.2013, 10:50   #3
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Перемещение объектов

Сообщение от ligala Посмотреть сообщение
Помогите пожалуйста. Необходимо создать несколько объектов (к примеру 5), чтобы при клики на одном из них он выделялся (менял цвет, типа активный, либо рамка появлялась). Затем, при клике в любой части экрана, данный объект начинал туда перемещаться.
Я новичок в этом деле... написал, что-то типа такого


Graphics3D 840,580

SetBuffer BackBuffer()

kr1=0;
kr2=0;

cam=CreateCamera()

PositionEntity cam,0,5,0


lit=CreateLight()

cur=CreateSphere(

EntityColor cur,255,215,0

PositionEntity cur,0,1,15

EntityPickMode cur, 2
NameEntity cur, "cur1"

cur2=CreateSphere(

EntityColor cur2,55,55,55

PositionEntity cur2,0,5,20

EntityPickMode cur2, 2
NameEntity cur2, "cur22"

;pln=CreatePlane()

;tex=LoadTexture("floor.jpg")

;ScaleTexture tex,10,10

;EntityTexture pln,tex

Repeat

If MouseHit(1) = True
pos = CameraPick(cam,MouseX(),MouseY())

If pos
name$ = EntityName(pos)
If name = "cur1"
EntityColor cur, 155,155,155
kr1=1

If name = "cur22"
EntityColor cur2, 100,100,210
kr2=1

EndIf

EndIf


EndIf
EndIf

If MouseHit(2) = True And kr1=1

mh%=MouseX()
mj%=MouseY()
mk%=MouseZ()

MoveEntity cur,mh*.01,mj*0.01,0

EndIf

If MouseHit(2) = True And kr2=1

mh%=MouseX()
mj%=MouseY()
mk%=MouseZ()

MoveEntity cur2,mh*.01,0,-mj*0.01

EndIf

UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End


Создал две сферы, одна выделяется вторая нет... Движения как такового тоже нет. Сфера перепрыгивает не совсем понятно куда.
Помогите пожалуйста реализовать, лучше не используя тот бред, который я написал. Кстати, пришлось использовать правую кнопку мыши (MouseHit(2)) левая почему то не срабатывала вообще. Спасибо!


Ну прям сразу - MouseX/Y/Z узнаёт координаты указателя мыши на экране, а не в 3d-пространстве. Поэтому и сфера у тебя перемещается в непонятно какие координаты.

Что бы узнать место куда ты ткнул мышью в 3d-пространстве нужно создать какую нибудь поверхность с EntityPickMode равное 2 (у тебя был plane, раскоментируй например его), если не нравится скрыть её с помощью EntityAlpha, почитать справку и использовать следующие команды при нажатии на кнопку мыши:
CameraPick(cam, MouseX(), MouseY())
PositionEntity(cur, PickedX(), PickedY(), PickedZ()).

Это если мне не изменяет память.
Ну, думаю, пищу для размышлений дал.


апд

А вторая сфера не выделяется потому что у тебя неверно организовано условие на MouseHit(1).

If MouseHit(1) = True
	 pos = CameraPick(cam,MouseX(),MouseY())
	
	 If pos
		 name$ = EntityName(pos)
		 If name = "cur1"
			 EntityColor cur, 155,155,155
			 kr1=1
		 Else if name = "cur22"
			 EntityColor cur2, 100,100,210
			 kr2=1
		 EndIf
	
	 EndIf
 EndIf
Сравни своё условие и как я его исправил. Разница видна.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ligala (13.02.2013)
Старый 11.02.2013, 23:31   #4
ligala
AnyKey`щик
 
Регистрация: 10.02.2013
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Перемещение объектов

Большое спасибо! Буду думать. О результатах отпишусь!

Последний раз редактировалось ligala, 13.02.2013 в 02:19.
(Offline)
 
Ответить с цитированием
Старый 13.02.2013, 12:21   #5
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Перемещение объектов

Кстати, пришлось использовать правую кнопку мыши (MouseHit(2)) левая почему то не срабатывала вообще. Спасибо!
И MouseHit за цикл достается только один раз, при повторном вызове результата не быдет.

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

Global mx,my,mz,msx,msy,msz,MouseHit1,mouseHit2

While ...
ReadMouse()
....
Wend
End

Function ReadMouse()
mx=MouseX()  ...
msx=MouseXSpeed()  ...
MouseHit1=MouseHit(1)
End Function
А после вызова MouseRead уже пользуешься MouseHit1 без ограничений, и сокращениями удобнее пользоватьсяв формулах
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ligala (13.02.2013)
Старый 13.02.2013, 23:31   #6
ligala
AnyKey`щик
 
Регистрация: 10.02.2013
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Перемещение объектов

Спасибо. Учту.
У меня новый набор вопросов =(
Что-то тяжело идет (5 лет не программировал)...
В общем решил, пока, сделать меню. Сделал что-то убогое, отдаленно напоминающее. Но вот не знаю как фоновую картинку вставить. Точнее вставляю, но она становится на передний план затуляя надписи (старт, выход). Может ли данная картинка быть .gif (анимацией). Помогите, пожалуйста решить данную проблему.

Вот код моего меню:

Graphics3D 640, 480, 16, 1
SetBuffer BackBuffer()

Global fontB=LoadFont("Verdana",82)
Global FontM=LoadFont("Verdana",32)

Global GameScr=0

Global aa=LoadImage("1.jpg")
;==================================
;main cycle

Repeat

Select GameScr

Case 0

UpdateStartScreen()

DrawImage aa, 0,0

End Select

Flip

Until KeyHit(1)

;=================================
;Functions
;=================================

Function UpdateStartScreen()

Cls

tShift=0
If RectsOverlap(MouseX(),MouseY(),1,1,320-50,240-12,100,32) tShift=1
If RectsOverlap(MouseX(),MouseY(),1,1,320-50,280-12,100,32) tShift=2

SetFont FontB ;setup font
Color 255,100,40
Text 320,150,"Project",True,True

SetFont FontM

If tShift=1 Color 0,255,0 Else Color 255,0,0
Text 320,240, "Start model",True,True

If tShift=2 Color 0,255,0 Else Color 255,0,0
Text 320,280, "Quit",True,True

Color 250,200,0

cursor=LoadImage("cursor.bmp")
DrawImage cursor, MouseX(),MouseY()
;Text MouseX(),MouseY(),"*",True,True

If MouseHit(1)

Select tShift

Case 1

End

Case 2

End

End Select

EndIf

End Function


2. Хочу добавить опции, чтобы можно было выбрать разрешение. Пока не знаю как. Или чтоб само подстраивалось по пользовательское...

3. Думал сделать не просто надписи (старт, выход), а параллелепипеды, натянуть на них текстуры, но можно ли как-то на них потом писать, т.е. поверх текстуры?

4. Не пойму как можно вставить видео при запуске игры. Типа заставки.

5. Это правда не относиться к меню, но можно ли забрать из файла матрицу, а потом вернуть преобразованную в другой файл (или хотя бы в этот же)?

6. Читал, что на цетере были статьи по созданию инвентаря, но сайт сейчас не работает, поделитесь, пожалуйста, опытом. Правда мне не инвентарь нужен, а панель состояния. Типа какое в руках у персонажа1 оружие, а какое у персонажа2 и т.д.

Люди добрые помогите, пожалуйста.
(Offline)
 
Ответить с цитированием
Старый 14.02.2013, 01:32   #7
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Перемещение объектов

Сообщение от ligala Посмотреть сообщение
Спасибо. Учту.
У меня новый набор вопросов =(
Что-то тяжело идет (5 лет не программировал)...
В общем решил, пока, сделать меню. Сделал что-то убогое, отдаленно напоминающее. Но вот не знаю как фоновую картинку вставить. Точнее вставляю, но она становится на передний план затуляя надписи (старт, выход). Может ли данная картинка быть .gif (анимацией). Помогите, пожалуйста решить данную проблему.

Вот код моего меню:

Graphics3D 640, 480, 16, 1
SetBuffer BackBuffer()

Global fontB=LoadFont("Verdana",82)
Global FontM=LoadFont("Verdana",32)

Global GameScr=0

Global aa=LoadImage("1.jpg")
;==================================
;main cycle

Repeat

Select GameScr

Case 0

UpdateStartScreen()

DrawImage aa, 0,0

End Select

Flip

Until KeyHit(1)

;=================================
;Functions
;=================================

Function UpdateStartScreen()

Cls

tShift=0
If RectsOverlap(MouseX(),MouseY(),1,1,320-50,240-12,100,32) tShift=1
If RectsOverlap(MouseX(),MouseY(),1,1,320-50,280-12,100,32) tShift=2

SetFont FontB ;setup font
Color 255,100,40
Text 320,150,"Project",True,True

SetFont FontM

If tShift=1 Color 0,255,0 Else Color 255,0,0
Text 320,240, "Start model",True,True

If tShift=2 Color 0,255,0 Else Color 255,0,0
Text 320,280, "Quit",True,True

Color 250,200,0

cursor=LoadImage("cursor.bmp")
DrawImage cursor, MouseX(),MouseY()
;Text MouseX(),MouseY(),"*",True,True

If MouseHit(1)

Select tShift

Case 1

End

Case 2

End

End Select

EndIf

End Function


2. Хочу добавить опции, чтобы можно было выбрать разрешение. Пока не знаю как. Или чтоб само подстраивалось по пользовательское...

3. Думал сделать не просто надписи (старт, выход), а параллелепипеды, натянуть на них текстуры, но можно ли как-то на них потом писать, т.е. поверх текстуры?

4. Не пойму как можно вставить видео при запуске игры. Типа заставки.

5. Это правда не относиться к меню, но можно ли забрать из файла матрицу, а потом вернуть преобразованную в другой файл (или хотя бы в этот же)?

6. Читал, что на цетере были статьи по созданию инвентаря, но сайт сейчас не работает, поделитесь, пожалуйста, опытом. Правда мне не инвентарь нужен, а панель состояния. Типа какое в руках у персонажа1 оружие, а какое у персонажа2 и т.д.

Люди добрые помогите, пожалуйста.


1.
Global aa=LoadImage("1.jpg")
это я так понимаю загрузка фонового изображения? Если я правильно понял, то судя по твоему коду основного цикла оно и должно быть сверху, т.к. рисуется после всех изображений и текстов. Минимум что надо сделать - сначала отрисовывать фон, потом всё остальное. Основываясь на твоём коде это будет так:
Repeat

Select GameScr

Case 0

DrawImage aa, 0,0

UpdateStartScreen()

End Select

Flip

Until KeyHit(1)
Если в теории, то фоновое изображание вполне может быть gif-анимацией, см. пункт 4. В теории - потому что я лично не пробовал.

2. Что бы программа на блице запускалась с разрешением пользовательского экрана надо заместо разрешения экрана указать нули. В твоём случае Graphics3d 0, 0, 16, 1. Для начала этого хватит. Но вполне реально реализовать и смену разрешения, глубины и оконности, там впринципе ничего трудного и нету.

3. Реально, можно рисовать и писать в текстуры, и потом текстурировать. Смотри блицевский пример по команде CreateTexture. Но лучше использовать готовые текстуры с текстом, хотя это лично моё мнение.

4. В последних версиях блица появились команды OpenMovie, CloseMovie, DrawMovie и какие то ещё связанные с этим. Они же, кстати, открывают и рисуют *.gif картинки. В блице есть примеры по их использованию.

5.6. не компетентен в данных вопросах, хотя забать из файла и записать в файл можно что угодно, вопрос будет ли соблюдаться формат первоначального файла (если нужно конечно).
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ligala (17.02.2013)
Старый 17.02.2013, 16:48   #8
ligala
AnyKey`щик
 
Регистрация: 10.02.2013
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Перемещение объектов

2. Что бы программа на блице запускалась с разрешением пользовательского экрана надо заместо разрешения экрана указать нули. В твоём случае Graphics3d 0, 0, 16, 1. Для начала этого хватит. Но вполне реально реализовать и смену разрешения, глубины и оконности, там впринципе ничего трудного и нету.
Если использовать Graphics3d 0, 0, 16, 1, то как можно узнать то самое разрешение? Получается следующая беда, если писать Graphics3d 0, 0, 16, 1, то как подогнать картинки и видео под это разрешение? Возможно ли их растянуть/сузить или есть более изящное решение?

Можно подробнее про создание глубины и оконности?
Может есть утилиты для создания меню (какой-нить гуи менеджер или хз что) или примеры с коментами? Если есть какая-нибудь инфа поделитесь, пожалуйста. Т.к. помимо фона, так же съезжает и текст (start, quit и т.д., которые создаются так - Text 320,280, "Quit",True,True).

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

Большое спасибо за помощь!
(Offline)
 
Ответить с цитированием
Старый 17.02.2013, 17:13   #9
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Перемещение объектов

Сообщение от ligala Посмотреть сообщение
Если использовать Graphics3d 0, 0, 16, 1, то как можно узнать то самое разрешение?
width% = GraphicsWidth  ()
height% = GraphicsHeight ()
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com