Показать сообщение отдельно
Старый 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)