Как изменить положение объекта (над другими или под ними)?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Как изменить положение объекта (над другими или под ними)?

Сообщение Особист » 10.05.2006 (Ср) 12:57

Всем привет!

Вот, застрял с такой проблемой. Казалось бы элементарной, но тем не менее никак не могу въехать что к чему.
Короче есть на форме несколько объектов (к примеру Image1..10), и ещё один, скажем Image0, который необходимо двигать по экрану, причём его можно приближать или отдалять. При приближении объект перекрывает другие, а при отдалении, соответственно, перемещается за них.

Собственно, в режиме редактора в VB это реализуется "правая мышь - перенести назад (вперёд)". А как это делать с помощью кода?

Заранее спасибо!

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 10.05.2006 (Ср) 13:06

ZOrder ?
Пора уже всем хорошим людям собраться и убить всех плохих людей.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 10.05.2006 (Ср) 13:23

О, спасибо!! Работает!

А не подскажете ли ещё, как узнать значение этого ZOrder'а для объекта? что-то типа x = Image0.ZOrder ?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.05.2006 (Ср) 13:25

ZOrder 0 - поместить на нижний слой (позади всех).
ZOrder 1 - поместить на верхний слой (впереди всех).

Ну или наоборот.
Lasciate ogni speranza, voi ch'entrate.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 10.05.2006 (Ср) 14:14

Упс, блин! Не до конца оттестил... Действительно, либо самый верхний либо самый нижний...
А если надо, скажем, посередине (чтобы были объекты и сверху, и снизу)?
Вообще, это мне надо потому, что пишу изометрический движок, на каждом image будет по спрайту, ну а image0 - это будет герой, перемещаюийся в этом изометрическом, псевдо-3d пространстве (как например в старой спектрумовской игрушке Knight Lore) :))

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 10.05.2006 (Ср) 14:23

Делать тебе нечего... Добьёшсямигающей картинки и всё :(
Такие вещи надо делать на DirectX
Изображение

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 10.05.2006 (Ср) 14:35

Ну, можно попробовать реализовать с использованием теневого экрана, тогда оно мигать не должно... Потому что изучение DirectX, да ещё для VB, мне кажется задачей почти невыполнимой с учётом свободного времени...
Да и вообще, интересно, как реализуется этот вот принцип "вверх/вниз". Вот тот же Corel работает со слоями, безо всяких DirectXов..

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.05.2006 (Ср) 14:47

В том же Corel внутренности может чуть проще DirectX, а может наоборот.


Сначала image2 поверх image1, потом image3 поверх image2. Будет слоями. Но зачем?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 10.05.2006 (Ср) 15:03

GSerg писал(а):В том же Corel внутренности может чуть проще DirectX, а может наоборот.


Сначала image2 поверх image1, потом image3 поверх image2. Будет слоями. Но зачем?


Вариант. Я тоже об этом думал, но тогда придётся постоянно проделывать цикл наложения одно на другое (пространство-то где-то 10х10х10 объектов). Неужели нет способа попроще??

А нужно затем, что вполне возможна такая ситуация, когда перемещаемый по экрану объект оказывается между двумя статичными.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.05.2006 (Ср) 15:10

А чем не подходит BitBlt / TransBlt

А вообще если не хочешь учить ДиректИкс, возьми готовый движок

Из бессплатных и простых (и удобных к тому же)
(По увеличению мощности (на момент когда Я это скачивал))
RealVision3D
IRender3D
TrueVision3D
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 10.05.2006 (Ср) 15:42

Хакер писал(а):А чем не подходит BitBlt / TransBlt

А вообще если не хочешь учить ДиректИкс, возьми готовый движок

Из бессплатных и простых (и удобных к тому же)
(По увеличению мощности (на момент когда Я это скачивал))
RealVision3D
IRender3D
TrueVision3D


А что такое BitBlt/TransBlt? ActiveX компоненты?

С движками - обязательно попробую, главное чтобы были примеры... (Кстати, а есть ли готовые игры на одном из этих движков - м.б. я плохо искал, но так и не нашёл ни разу никаких 3D-игр на VB...)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.05.2006 (Ср) 16:04

Это очень плохо искал значит, потому что они на этом форуме есть вообще-то...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Сообщение Денис Победря » 10.05.2006 (Ср) 16:31

БитБлт и тд - апишные функции. Поищи по форуму. Изучить их проще чем ДиректХа, а для изометрии этого хватит. Полезный ресурс (прада там на си) http://pmg.org.ru/

PS Чуть не забыл: msdn.com
[Место cдаётся]

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 10.05.2006 (Ср) 17:05

Всем спасибо, нашёл интересные статьи, изучаю :))

PS И всё же, как я понял, в Visual Basic'е невозможно задать произвольную позицию, а только поместить объект строго на задний план либо на передний...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 10.05.2006 (Ср) 18:24

Напрямую ZOrder(позиция_которую_хочу) нельзя. Можно написать программу так, чтобы задавать произвольную позицию.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 130

    TopList