|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
|||||||||||||||||||||
Доступ к полям класса пользовательских типов09.08.2024, 13:36. Показов 1125. Ответов 20
Метки нет (Все метки)
Предыстория.
Есть у меня игровой проект, шутер FPS, в нём изначально был один персонаж. Все его параметры и физика собраны в отдельном модуле (не классе). Решил переделать на мультиплеер (пока с ботами), соответственно модуль переделал на класс. И вот тут начинаются проблемы. Некоторые Public поля пользовательских типов (структуры), класс такое не позволяет. Вроде бы, решение простое - делаем поля Private и оборачиваем его в Property. Public Property таких типов тоже недопустимы, но тут спасает ключевое слово Friend.Но! Многие функции и процедуры математики реализованы так, что возвращают значение через ByRef параметр, а не как возврат в функции, но такой возврат перестаёт работать, когда к структуре мы получаем доступ через Property.Пример. Процедура vAdd суммирует вектора vIn1 и vIn2 и возвращает значение в vOut:
V0, V1, V2 - вектора):
T.V - вектор, находящийся в экземпляре класса):
Прилагаю минимальный тестовый проект.
0
|
|||||||||||||||||||||
| 09.08.2024, 13:36 | |
|
Ответы с готовыми решениями:
20
Доступ к полям класса через переменные другого класса Как получить доступ к полям класса, который в свою очередь является полем шаблонного класса? Доступ к полям класса |
|
Модератор
|
|
| 09.08.2024, 16:53 | |
|
Такое будет работать если Vector будет классом, а не UDT и в таком случае все действия можно упаковать в методы. Можно сделать LightWeight класс вектор который будет достаточно быстрым и занимать на 8 байт больше чем обычный UDT и с нужными методами.
0
|
|
|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
||
| 09.08.2024, 18:35 [ТС] | ||
|
А в конкретном текущем проекте я, видимо, откажусь от класса для игрока в пользу структуры, переделка минимальная - просто собрать параметры игрока в структуру, задавать массив игроков, работать с ними по индексу.
0
|
||
|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
||
| 09.08.2024, 18:44 [ТС] | ||
|
А там и ещё подводные камни появятся, сейчас массив структур с векторами, матрицами и т. п. - это, при желании, готовый вертексный буфер, в случае же классов это окажется массив указателей на данные в куче.
0
|
||
|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
||
| 09.08.2024, 19:00 [ТС] | ||
ByRef параметры.
0
|
||
|
Модератор
|
|
| 09.08.2024, 20:41 | |
|
Mikle Quits, смотри есть 2 пути. Какой ты выберешь?
Во втором случае ты объявляешь структуру внутри класса, и у тебя есть метод который возвращает тебе массив где первым элементом идет структура (внутри объекта).
0
|
|
|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
||||||||
| 09.08.2024, 20:58 [ТС] | ||||||||
vAdd - вектор, а не массив.На всякий случай уточню. Я знаю несколько вариантов решения проблемы, в п.1 привёл один, в п.3 ещё один. То есть свою задачу я решил, но параллельно возник вопрос, можно ли к структурам внутри классов иметь полноценный доступ извне по ссылке.
0
|
||||||||
|
Модератор
|
|||||||||||||||||
| 09.08.2024, 21:01 | |||||||||||||||||
3
|
|||||||||||||||||
|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
|
| 09.08.2024, 21:11 [ТС] | |
|
Не вижу описания типа
TPlayer.
0
|
|
|
Модератор
|
|
| 09.08.2024, 21:56 | |
|
Mikle Quits, добавил
Добавлено через 39 минут Кстати доступ к Friend полям намного быстрее чем к Public. Добавлено через 1 минуту Если не боишься библиотек типов, можно еще ускорить.
2
|
|
|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
||||
| 09.08.2024, 22:23 [ТС] | ||||
|
0
|
||||
|
Модератор
|
|||||||
| 09.08.2024, 23:07 | |||||||
А насчет API объявленных в TLB, в большинстве случаев уже почти неактуально.
2
|
|||||||
|
Модератор
|
|||
| 09.08.2024, 23:59 | |||
|
Добавлено через 6 минут Вот пример SSE с использованием Add-in'а.
2
|
|||
|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
|
| 10.08.2024, 08:33 [ТС] | |
SAFEARRAY я использовал и раньше, но через кучу PutMem GetMem, а, оказывается, есть готовое.Я только MoveArray (__vbaAryMove) начал переваривать, а тут ещё куча полезной информации.Благодарю.
0
|
|
| 10.08.2024, 11:48 | |||||||
|
Можно, используюя этот патч The trick-а (упрощенный слегка), сделать обертку-пустышку для процедуры vAdd в которой аргументы указать как Long. И передавать аргументы в "обертку" в виде указателей, а с нее они будут переадресовываться на vAdd в нужном виде.. Кликните здесь для просмотра всего текста
2
|
|||||||
| 10.08.2024, 15:28 | ||||||
|
Мне, кстати такой лайф-хак на ум пришел. Там этот патч все-время слетает при первой ide-шной компиляции, но его можно "реабилитировать" прямо в процедуре - "обертке"
0
|
||||||
|
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
|
||
| 11.08.2024, 11:10 [ТС] | ||
pV однократно и пользоваться, но часто функция оперирует локальными векторами, заданными в ней самой или полученными через аргументы. И функций много, vAdd - это просто пример.Нет. На практике это не пойдёт, хотя, конечно, демонстрирует возможности.
0
|
||
| 12.08.2024, 01:45 | ||
|
0
|
||
| 12.08.2024, 01:45 | |
|
Помогаю со студенческими работами здесь
20
Доступ к полям класса Доступ к полям внешнего класса Доступ к полям родительского класса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|