|
2D-программирование Вопросы, касающиеся двумерного программирования |
03.02.2009, 23:14
|
#1
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Type and etc...
Type My
Field entity
Field scalex#, scaley#, scalez#
End Type
Type Enemy
Field entity
Field scalex#, scaley#, scalez#
End Type
Type Other
Field entity
Field scalex#, scaley#, scalez#
End Type
Type Flow
Field entity
Field scalex#, scaley#, scalez#
End Type
///////Цикл//////////////////////////////////////////
selecting = выделенный объект
seltype$ = название типа(именно название - текстовая переменная)
num = номер объкта в типе
if seltype="My"
for i.my=each my
if selecting=i\entity then i\scalex=i\scalex+1 : scaleentity selecting, i\scalex, i\scaley, i\scalez
next
elseif seltype="Enemy"
for i.enemy=each enemy
if selecting=i\entity then i\scalex=i\scalex+1 : scaleentity selecting, i\scalex, i\scaley, i\scalez
next
elseif seltype="Other"
for i.other=each other
if selecting=i\entity then i\scalex=i\scalex+1 : scaleentity selecting, i\scalex, i\scaley, i\scalez
next
elseif seltype="Flow"
for i.flow=each flow
if selecting=i\entity then i\scalex=i\scalex+1 : scaleentity selecting, i\scalex, i\scaley, i\scalez
next
endif
///////Цикл//////////////////////////////////////////
Ну вот примерно такой код у меня сейчас... И если с четырмя типами это ещё терпимо, то с например если будет 50 типов, это никуда не годится!!!... Как то надо приспособить по сути ОДИНАКОВЫЙ код ко всем типам, к тому же как видно и типы тоже однотипны клмбр...
Как мне быть??? Заранее спасибо!
Уверен вариантов решения проблемы или не одного или несколько...во втором случае хотелось бы узнать хотябы вкратце про каждый . лучше кодом конечно, но и на словах если будет, тоже хорошо!
|
(Offline)
|
|
03.02.2009, 23:30
|
#2
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Type and etc...
type MyObject
field strtp$
Field entity
Field scalex#, scaley#, scalez#
end type
for i.myObject=each myObject
if strtp = seltype
if selecting=i\entity then i\scalex=i\scalex+1 : scaleentity selecting, i\scalex, i\scaley, i\scalez
endif
next
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
04.02.2009, 22:48
|
#3
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Type and etc...
Я об этом тоже думал ... нуууууу...ну это не решение проблемы впринципе в моём случае((( Понимаешь, HolyDel, у типов по сути только свойство scale и совпадают, а потом масса различных свойств у каждого типа... Так что это нехорошо всё объединять в один тип, нехорошо...
ЗЫ: админы, извиняюсь, а нельзя мне ник поменять на ILIONSE ???
|
(Offline)
|
|
04.02.2009, 23:02
|
#4
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Type and etc...
Холидел верно тебе всё написал. Незачем копировать тонны одинакового в создании и обновлении - надо стремиться к объединению. Вообще в чистом виде твоя задача решается с помощью ООП, которого в Блитз3Д нет (есть в БМакс) - там наследовать надо от базового типа все остальные. НУ а тут я бы рекомендовал объединять всё что можно. Но не в один тип, а лучше в несколько - Player - все игроки и враги, GameObjects - всякие там осколки и т.п. - ну короче смотри по ситуации.
Да, и _не_используй_ строковые переменные, если их не видит игрок (ибо хоть при нынешних объёмах ОЗУ ощутимого различия не будет но всё же строки жрут намного больше интов и обрабатываются медленнее). В данном случае seltype можно сделать целочисленной и прописать константы
Const My = 1, Enemy = 2 и т.д. а далее проверять на равенство константам - If seltype = Enemy then...
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
|
|
04.02.2009, 23:12
|
#5
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Type and etc...
ELIAS, тогда никак. в блице шаблонов нет, препроцессора нет, виртуальных функций нет, наследования нет
Последний раз редактировалось HolyDel, 05.02.2009 в 00:00.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
04.02.2009, 23:50
|
#6
|
Дэвелопер
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений (для 1,460 пользователей)
|
Ответ: Type and etc...
Сообщение от HolyDel
ELIAS, тогда никак. в блице шаблонов нет, препроцессора нет, виртуальных функций нет, наследования нет.
|
и самое ужасное - нет pattern matching'a, а без него сейчас ну просто никуда
|
(Offline)
|
|
05.02.2009, 10:49
|
#7
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Type and etc...
можно попробовать так:
Type Object
Field Tip
Field p.player, b.bot, t.thing
End Type
Const OBJ_PLAYER=1, OBJ_BOT=2, OBJ_THING=3
Type Player
Field mesh, healph, power...
End Type
Type Bot
Field mesh, healph, power, level
End Type
Type Thing
Field mesh, tip
End Type
For o.object = each Object
Select o\Tip
case OBJ_PLAYER
UpdatePlayer(o\p.player)
case OBJ_THING
UpdateThing(o\t.Thing)
case OBJ_BOT
UpdateBot(o\b.Bot)
End Select
Next
пусть и лишний тип создается, зато все навиду и компактно.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо H@NON за это полезное сообщение:
|
|
05.02.2009, 19:19
|
#8
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: Type and etc...
H@NON, спасибо !!
Это можно сказать некий вариант реализации наследия !!
|
(Offline)
|
|
05.02.2009, 19:34
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Type and etc...
Во-первых, используете служебные имена в кач-ве имён переменных - так нельзя.
Во-вторых:
Type Object_
Field Tip
Field Handle_%
End Type
Const OBJ_PLAYER=1, OBJ_BOT=2, OBJ_THING=3
Type Player
Field mesh, healph, power
End Type
Type Bot
Field mesh, healph, power, level
End Type
Type Thing
Field mesh, tip
End Type
For o.Object_ = Each Object_
Select o\Tip
Case OBJ_PLAYER
Local Plr.Player=Object.Player(Handle_)
UpdatePlayer(Plr)
Case OBJ_THING
Local Thi.Thing=Object.Thing(Handle_)
UpdateThing(Thi)
Case OBJ_BOT
Local Bt.Bot=Object.Bot(Handle_)
UpdateBot(Bt)
End Select
Next
вывод - размер струкутры-интерфейса Object_ имеет константный sizeof для лбого кол-ва типов; внедрение новых объектов хранения реализуется в двух,а не в тёрх местах кода (1 - добавить константу - код_типа, 2- дописать ещё один case в селекторе).
Минус - за счёт type cast`а int->ptr* (разумеется - это условность, аналогия) тратится немного больше времени.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:05.
|