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

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

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

Ответ
 
Опции темы
Старый 17.05.2009, 08:37   #1
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
TMethod?

Можно ли в BlitzMax передавать в тип функцию или метод?
Образный код:
Type TAssa
 Field Draw:TMethod
 Field oppa:Int

 Method Preved()
  '...work in progress
 EndMethod
EndType

assa:TAssa=New TAssa
assa.Draw=SuperPuperDraw()

Repeat
 assa.Preved()
 assa.Draw()
Forever
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 17.05.2009, 12:42   #2
jimon
 
Сообщений: n/a
Ответ: TMethod?

может тебе нужно наследование ? потому что то что ты хочешь почти не применяется в ООП

Type TDrawObject
  Method Draw() Abstract
EndType

Type TAssa Extends TDrawObject
  Method Draw()
    ' special draw code
  EndMethod
EndType
таким же способом если описать Draw у TDrawObject то его можно вызывать из Draw в TAssa
 
Ответить с цитированием
Старый 18.05.2009, 11:14   #3
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: TMethod?

можно сделать поле как указатель на функцию. А вообще непойму как ты хочешь метод использовать без объекта?
__________________
(Offline)
 
Ответить с цитированием
Старый 20.05.2009, 23:55   #4
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: TMethod?

2Jimon : не, через наследование я не хотел делать.
На самом деле меня просто привлёк тип TMethod

2dimanche13 : Да допустим Java ADA или PHP поддерживают передачу функции откуда угодно в тип (даже через функцию).
Чтото типа:

function assa(p1,p2)
{
 return p1+p2;
};
Tassa.Create(1,2,3,function assa(p1,p2), true)
Или

Tassa.Create(1,2,3,function (p1,p2){
 return p1+p2;
}, true)
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 21.05.2009, 11:23   #5
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: TMethod?

вообще-то метод- это функция в типе, просто ее первый параметр сам объект(self).
__________________
(Offline)
 
Ответить с цитированием
Старый 21.05.2009, 18:09   #6
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: TMethod?

вообще-то метод- это функция в типе, просто ее первый параметр сам объект(self).
Не понял ход мысли...
Это и так понятно, но я говорю не про то. Я имел в виду транспортировку функции или метода как обьекта.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 21.05.2009, 21:31   #7
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: TMethod?

объясни на пальцах что тебе надо сделать.
__________________
(Offline)
 
Ответить с цитированием
Старый 22.05.2009, 08:53   #8
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: TMethod?

На самом деле мне было просто интересно что за тип TMethod.
Вот я и подумал неужели в BlitzMax можно создавать функции-кочевники.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 22.05.2009, 13:13   #9
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: TMethod?

TMethod это один из элементов "отражения"(reflection). Он служит для того чтобы можно было узнать по объекту, какими методами он обладает и какие параметры эти методы принимают. Так же возможен вызов этих методов.
на счет функций кочевников можно сказать одно. Без проблем делается массив функций в типе и ты эти функции можешь инициализировать из вне.
__________________
(Offline)
 
Ответить с цитированием
Старый 24.05.2009, 22:33   #10
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: TMethod?

массив функций в типе...
Можно больше деталей? Это любопытно.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 24.05.2009, 22:58   #11
jimon
 
Сообщений: n/a
Ответ: TMethod?

ну вот к примеру указатель на функцию
	Method AddFunction(func:Int(ls:Byte Ptr), name:String)
		If (m_started)
			lua_register(m_lua_state, name, func)
		End If
	End Method
 
Ответить с цитированием
Старый 24.05.2009, 23:24   #12
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: TMethod?

Сообщение от Randomize Посмотреть сообщение
массив функций в типе...
Можно больше деталей? Это любопытно.
ну очень просто.
пример собран на коленке, не проверял.

SuperStrict

Type myType

	Field callback()[]

	Method add_function( num:Int, func() )

		If( callback.length - 1 < num ) Then 
			callback = callback[ .. num + 1]
		End If

		callback[ num ] = func
	End Method

	Method run_all()
		For Local func() = EachIn callback
			func()
		Next
	End Method

End Type

Function func_1()
	Print "func_1"
End Function	

Function func_2()
	Print "func_2"
End Function	

Function func_3()
	Print "func_3"
End Function	

Local bugoga:myType = New myType

bugoga.add_function( 0 , func_1 )
bugoga.add_function( 1 , func_2 )
bugoga.add_function( 2 , func_3 )
bugoga.add_function( 3 , func_1 )

bugoga.run_all() ' пройдемся по всем функциям

end
блин поставил намедни 1.33 рс5 и перестала документация компилиться, а потом и всё перестало компилиться. Жалуется на шквал. Но я его блин даже не юзал никогда, тока проверял враппер. Может скажет кто как починить? Я уже на 1.30 откатился - та же фигня...
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (26.05.2009)
Старый 26.05.2009, 06:07   #13
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: TMethod?

dimanche13, спасибо большое! Именно это мне и было интересно.

Косательно твоей проблемы:
я использую версию 1.30, такой же глюк был. Помогло лишь тотальное удаление папки BlitzMax с корнем и последующая переустановка.
После систематических вылетов, глюков и лагов BlitzMax выяснил, что это происходит изза наличия вирусов на машине. После глубокого скана, переустановки ОС и повторного полного скана больше таких глюков не замечал. Проверь, может вирусы.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 26.05.2009, 11:59   #14
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: TMethod?

Переставил ОСь - все по прежнему, вирусов -нет 99%. Осталось вариант с полным удалением попробовать...
__________________
(Offline)
 
Ответить с цитированием
Старый 26.05.2009, 12:02   #15
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: TMethod?

К сожалению перестановка оси не избавляет от вирусов.
От них спасает форматирование дисков и запись только проверенных файлов и программ. Или банально использовать любой антивирус хотя бы в триальном режиме
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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