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

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

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

Ответ
 
Опции темы
Старый 19.08.2007, 19:47   #1
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Как узать объект?

Ну есть у меня например ф-ция для триггера:
function Trigger(x:int,y:int, ob:object), которая должна изменять состояние объекта ob.
как взять ссылку на этот объект, что бы изменить внутренние его поля ob.x = 1 или использовать методы ob.choose() ?
Я сделал так, в самом объекте написал метод get() ,который возращает себя (return self), но это работает только если, я жестко указываю в объявлении функции тип объекта(TMyObj)
function Trigger(x:int,y:int, ob:TmyObj)
Возможно ли сделать как-нибудь по-другому? то есть универсальную функцию, а не набор из
function TriggerObj1(x:int,y:int, ob:TmyObj1) ..
function TriggerObj2(x:int,y:int, ob:TmyObj2) ..
function TriggerObj3(x:int,y:int, ob:TmyObj3) ..
(Offline)
 
Ответить с цитированием
Старый 19.08.2007, 20:27   #2
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Re: Как узать объект?

Сделай из нее метод, и будет тебе счасьте.
(Offline)
 
Ответить с цитированием
Старый 19.08.2007, 20:31   #3
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Как узать объект?

чего???
(Offline)
 
Ответить с цитированием
Старый 19.08.2007, 20:41   #4
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Re: Как узать объект?

Ну тут не такой подход нужен. Здесь нужно методами все это промышлять.
(Offline)
 
Ответить с цитированием
Старый 19.08.2007, 21:18   #5
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Как узать объект?

ну поделись своим методом...
(Offline)
 
Ответить с цитированием
Старый 19.08.2007, 21:26   #6
jimon
 
Сообщений: n/a
Re: Как узать объект?

кури вот так
Type TmyObj
field lol% = 1

method Trigger(x:int,y:int)
debuglog lol
end method

End Type

local a:Tmyobj = new tmyobj
a.Trigger(0,0)
 
Ответить с цитированием
Старый 19.08.2007, 21:27   #7
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Re: Как узать объект?

Ну если я правильно мыслю, то все по типу:

Есть тип Object

type Object
field x
field y
end type
Набираю в броузере, могу ченить напутать.
Ну и сменять их методом:
type Object
field x:int
field y:int
Method Triger(nx:int,ny:int)
x=nx
y=xy
end Method
end type

Так и так, придется набирать Сэкономить нажатие клавиш вроде не получится.
(Offline)
 
Ответить с цитированием
Старый 19.08.2007, 21:32   #8
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Как узать объект?

Пилять, может я что-то не так объяснил. Все что вы пишите, я и так знаю. Я говорю тип триггер , в который можно передавать любой объект вот что меня интересует.
2JohnK type object - не скомпилится ,потому что это два зарезервированных слова.
(Offline)
 
Ответить с цитированием
Старый 19.08.2007, 21:40   #9
jimon
 
Сообщений: n/a
Re: Как узать объект?

dimanche13
юзай наследие
Type Trigger

 field obj:TImage

 method Trig(x,y)
  drawimage obj,x,y
 end method
End Type

Type Trigger1 extends Trigger
 field blablabla%

 method Something()
  Trig(0,0)
 end method
End Type
любой обьект будет Object
function myfunc(my_variable:Object)
end function
 
Ответить с цитированием
Старый 19.08.2007, 22:40   #10
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Как узать объект?

В общем я понял. Я плохо объяснил, что хочу. И никто мне не поможет, кроме себя самого. Всем спасибо. Все свободны.
(Offline)
 
Ответить с цитированием
Старый 27.10.2008, 17:42   #11
ICoder
AnyKey`щик
 
Аватар для ICoder
 
Регистрация: 15.09.2008
Адрес: Набережные Челны
Сообщений: 15
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Как узать объект?

Несмотря на давность темы - решил оживить её. Вот один вариант:
Type TA
	Field x%, y%
	Field str$="This is type A"
EndType

Type TB
	Field x%, y%
	Field str$="This is type B"
End Type

Type TC
	Field x%, y%
	Field str$="This is type C"
End Type

Function Func(obj:Object)
	If TA(obj) Print TA(obj).str
	If TB(obj) Print TB(obj).str
	If TC(obj) Print TC(obj).str
End Function

Local aaa:TA=New TA
Local bbb:TB=New TB
Local ccc:TC=New TC

Func(ccc)
Func(aaa)
Func(bbb)
Я вот хотел создать тему с таким вопросом... Так что, если у кого есть дельное решение данного вопроса - напишите, please!
(Offline)
 
Ответить с цитированием
Старый 03.11.2008, 12:10   #12
Черный крыс
 
Сообщений: n/a
Ответ: Как узать объект?

Любой пользовательский обьект экземпляра - есть не что иное - как расширенный Object - их можно привести друг в друга.

Для общих случаев юзай обьекты.
Здесь тип Object - выступает неким "мостиком" который хранит указатель на обьект класса.
Для частного случая, когда необходимо точно узнать триггер это или например лифт, то просто приводим этот обьект в пользовательский тип, если результат не равен нулю - значит попали....=)
 
Ответить с цитированием
Старый 03.11.2008, 18:18   #13
ICoder
AnyKey`щик
 
Аватар для ICoder
 
Регистрация: 15.09.2008
Адрес: Набережные Челны
Сообщений: 15
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Как узать объект?

Сообщение от Diablo1909 Посмотреть сообщение
Для общих случаев юзай обьекты.
Т.е. лучше прямо обращаться к какому-либу объекту по его имени, чем посредством "мостика" (Object)???
(Offline)
 
Ответить с цитированием
Старый 04.11.2008, 11:20   #14
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: Как узать объект?

Да, это все понятно, что вы говорите, суть проблемы была - загнать любой тип данных в функцию, и проблема до сих пор не решена. А к какому типу принадлежит объект можно и select-ом узнать.
__________________
(Offline)
 
Ответить с цитированием
Старый 16.11.2008, 14:31   #15
oxid
Нуждающийся
 
Регистрация: 20.08.2006
Сообщений: 54
Написано 3 полезных сообщений
(для 4 пользователей)
Re: Ответ: Как узать объект?

Сообщение от dimanche13 Посмотреть сообщение
Да, это все понятно, что вы говорите, суть проблемы была - загнать любой тип данных в функцию, и проблема до сих пор не решена. А к какому типу принадлежит объект можно и select-ом узнать.
Ужос просто. Еще не решена.
Есть такое понятие - иерархия классов, оно подразумевает некий базовый класс (в идеале полностью абстрактный) от которого наследуются все остальные.
Проблема решается 2мя способами - перегружаемыми функциями или с помощью ООП.
1. Перегружаемых функций в БМ нет. Их можно сделать ручками, что неудобно. Этот вариант ты уже написал в самом первом посте. Все это гимор и останавливаться на этом не буду.
2. ООП. Тут есть где разгуляться:
2.1. Определение типов и приведение типов - уже описывали. Могу добавить что появился класс, который играет роль своеобразного указателя на класс объекта, что криво, но лучше что-то чем ничего. Ну и вообще основное его назначение не это, а отражения (reflection). И имя ему TTypeId. И плавно переходим к
2.2. Отражения. С помощью TTypeId можно определить класс и вызвать метод или обратиться к полю по имени. А также проверить есть ли нужное поле в классе, по его имени - Method FindField:TField( name$ ). Это подойдет ну для любого класса.
2.3. Иерархия (ИМО самый правильный и переносимый способ). Наследуем все нужные для работы классы от базового, в котором прописываем нужные общие поля и методы (абстракция в БМ есть). Аргументом передаем базовый тип, с которым можно делать то, что нам нужно.
Пжалуста.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (21.07.2009)
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поворот объекта на объект rr333 3D-программирование 11 02.01.2010 22:39
Курсор и объект Hurrit 3D-программирование 13 13.10.2009 22:33
Объект & функция DRAG C++ 6 02.12.2007 03:18
В какой объект ткнули Данил BlitzMax 11 29.10.2007 12:47
Толкаем обЪект Horror 3D-программирование 4 31.01.2007 02:06


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


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