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

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

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

Ответ
 
Опции темы
Старый 20.02.2011, 17:30   #61
baton4ik
Дэвелопер
 
Аватар для baton4ik
 
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений
(для 1,962 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Сообщение от JeanWinters Посмотреть сообщение
Еще вопрос: можно ли использовать статичные константы в типе и другие типы в типе?
Константы использовать можно. Другие типы нельзя.
Как ты себе представляешь статичные константы? Константа сама по себе статична, на то это и константа.
(Offline)
 
Ответить с цитированием
Старый 20.02.2011, 17:40   #62
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

В C# например нету оператора Method или Function. Объявление функции и её роль зависит от её значений перед, например в классе:
public string Name () {
Это будет аналогично объявлению метода в бм.
А вот:
public static string Name () {
Будет аналогично функции, и вызывается не через объект (хотя и так можно), а через сам класс, например:
public class TUser {
   private string _nameFirst;
        private string _nameLast;
   
        ...
       
        public static string Name {
              get { return MakeName(_nameFirst,_nameLast); }
           }
        public static string MakeName(string first, string last) {
              return first+" "+last;
        }
       
        ...
}

...

TUser _user = new TUser();
...
_user.Name // получает имя юзера.
...
TUser.MakeName("James","Bond") // получает имя "James Bond"
Вот MakeName - это функция класса, она есть статичная функция.
А функция Name, в понятии бм - это метод.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (20.02.2011)
Старый 22.02.2011, 01:14   #63
DeeJex
Разработчик
 
Аватар для DeeJex
 
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений
(для 329 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Объясните нубу:
1) Почему переодически отключается возможность копипастирования кода в стандартном IDE?
2)
Type TMaterial
Field img :TImage
	Method Create:TMaterial(image :TImage)
		Mat :TMaterial = New TMaterial
			Mat.img = image
		Return Mat
	EndMethod
End Type
...
Mat :TMaterial = TMaterial.Create(LoadImage("dat\banana.png"))
Ошибка на Create. Вроде ж сделал как в хелпе. (Недавно пересел на бимакс, еще плохо его знаю)
__________________
299 792 458
(Offline)
 
Ответить с цитированием
Старый 22.02.2011, 01:26   #64
baton4ik
Дэвелопер
 
Аватар для baton4ik
 
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений
(для 1,962 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Измени "Method Create:TMaterial(image :TImage)" на "Function Create:TMaterial(image :TImage)"
Выше как раз описана разница между методом и функцией типа.

Насчёт копипаста не скажу, сразу установил blide.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DeeJex (22.02.2011)
Старый 11.03.2011, 22:01   #65
Черный крыс
 
Сообщений: n/a
Ответ: Вопрос-Ответ (для новичков BlitzMax)

1) Типы внутри типов использовать МОЖНО., естественно, обьявить новый тип в теле другого типа никто вам не даст. А вот такая запись вполне допустима :

Type TCar
    Field _pos:Float
    Method Update()
        Type TTire
            field _x:Float
            Method Update()
                ...
            EndMethod
        EndType
    EndMethod
EndType
Тип TTire - временный, или по другому статичный.

2) Насчет статичных функций. Всегда считал, что с приходом методов они стали атавизмом. Ну нету таким функциям рационального использования и все тут! Единственное что они привносят - так это путаницу, и нечитабельность кода. Более того они не являются частью ООП. Многие новички любят делать такими функциями конструкторы и деструкторы, но вот только с точки зрения ООП - это все равно, что загнать себя в угол и кричать потом от безисходности и нечитабельности кода. Да и еще, статичные функци начинают "по настоящему" мешать, если речь идет о развитии и поддержке кода, так как они убивают само понятие "наследования" читай ООП.

3) Отсюда вывод -> Никаких функций в типах. Конструкторы и деструкторы можно легко сделать на методах.

Type TVector
    Field x:Float
    Field y:Float
 
    Method New() ' Дефолтный конструктор
        x=0 ; y=0
    EndMethod
 
    Method Create:TVector(x:Float = 0.0, y:Float = 0.0) ' Расширенный конструктор
        Self.x=x ; Self.y=y
        Return Self
    EndMethod
 
    Method Delete() ' Деструктор для GC
        Free()
    EndMethod
 
    Method Free() ' Принудительный деструктор
        x=Null ; y=Null
    EndMethod
EndType
Юзаем так :

 
Local v0:TVector = New TVector ' x=0 ; y=0
Local v1:TVector = New TVector.Create(10.0,15.0) ' x=10.0 ; y=15.0
 
v0 = Null ' Delete()
v1.Free()
v1 = Null
4) Как всем известно если вы в потомке обьявляете одноименный метод предка, то метод потомка заместит метод предка, а метод предка станет доступным через кейворд 'Super'. - В той же мере это относится и к полям, они тоже перекрываются и поля предка доступны через это же слово. Пример :

Type TParent
Field _value:String = "Parent field!"
EndType
 
Type TChild Extends TParent
Field _value:Int = 100
 
Method Test()
DebugLog(Super._value)
DebugLog(String(_value))
EndMethod
EndType
Догадайтесь с трех раз, что выведется на консоль?!

ЗЫ : Хотя, некоторые БМаксеры считают это небезопасным маневром в плане уборки мусора.

ПРАВКА : Насчет полей я был не прав. Их можно только переопределить.

Последний раз редактировалось Черный крыс, 12.03.2011 в 01:00.
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
JeanWinters (12.03.2011)
Старый 12.03.2011, 09:05   #66
JeanWinters
Знающий
 
Регистрация: 22.12.2007
Сообщений: 223
Написано 22 полезных сообщений
(для 51 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

А какой может быть практический смысл использования "типа в типе"? Или это просто разработчики языка не доглядели и теперь можно делать такой странный "хак"?..
(Offline)
 
Ответить с цитированием
Старый 12.03.2011, 11:35   #67
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Почитай что нибудь про ООП. Многое станет ясно.
__________________
(Offline)
 
Ответить с цитированием
Старый 12.03.2011, 12:16   #68
Черный крыс
 
Сообщений: n/a
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Это скорость.

Вообще все типы, методы, функции, поля, переменные, константы - образуют собой дерево, которое заносится как я понимаю в стек (а может и по другому). И если допустим мы вызываем метод, тогда чем ближе какой-либо обьект лижет в ветке данного метода, тем быстрее произойдет поиск / вызов / операция.

Global value:Int = 100
 
Function Test()
    Local value:Int = 50
    DebugLog value
EndFunction
 
Function Test2()
    DebugLog value
EndFunction
 
Function Test3(value:Int)
    DebugLog value
EndFunction
Функция, метод или тип представляет собой что то вроде ветки. Быстрее всех выполнится функция Test3 самой медленной будет Test2.
В одно время Oxid высказывал свое мнение по этому поводу : если в функции обьявить локальную переменную и назвать ее коротким именем, то есть шанс что переменная занесется в регистр процессора для мнгновенного доступа.

Для глобальной функции приоритет приблизительно таков : аргументы->локальные переменные->глобальные переменные.

Для метода : аргументы->поля->локальные переменные->глобальные переменные внутри типа->глобальные переменные.

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

А если рассматривать целиком весь БМакс, то он весь состоит из чунков (порций кода), - отсюда его модульность.
По идее глобальную функцию (и не только ее) можно вызвать класически : DrawImage(image,x,y,0)
А можно явно указать с какого чунка вызвать функцию : brl.max2d.DrawImage(image,x,y), в той же степени это относится ко всему остальному.
Хотя на самом деле компилятор на стадии формирования кода все вызовы приводит ко второму виду.

Для пытливых - можно пойти еще дальше : brl.max2d.TImage(image).Frame(0).Draw(...) - но это уже черезчур =)
 
Ответить с цитированием
Старый 01.05.2011, 21:41   #69
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Запускаю блицмакс, а он выдает ошибку "Unable to determine BlitzMax version. Please, reinstall BlitzMax to repair this problem". Это че за хрень?
__________________

(Offline)
 
Ответить с цитированием
Старый 01.05.2011, 23:39   #70
baton4ik
Дэвелопер
 
Аватар для baton4ik
 
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений
(для 1,962 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Пожалуйста, переустанови BlitzMax, чтобы исправить эту проблему.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Taugeshtu (03.05.2011)
Старый 02.05.2011, 00:01   #71
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Спасибо, кэп. Переустановил, то же самое.
__________________

(Offline)
 
Ответить с цитированием
Старый 03.05.2011, 15:21   #72
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

У тебя Widows?
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 03.05.2011, 20:43   #73
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

К сожалению, да. Поставил Blide, заработало.
__________________

(Offline)
 
Ответить с цитированием
Старый 18.06.2011, 15:37   #74
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Есть List, в нём несколько int. Проходим по нему For..Each'ем - MAV - пишет, что индекс цикла (который, естественно, тоже int) должен быть объектом. Разве Int это не тип?
Error: " EachIn index variable must be an object"
__________________

(Offline)
 
Ответить с цитированием
Старый 19.06.2011, 21:36   #75
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Сообщение от Nerd96 Посмотреть сообщение
Есть List, в нём несколько int. Проходим по нему For..Each'ем - MAV - пишет, что индекс цикла (который, естественно, тоже int) должен быть объектом. Разве Int это не тип?
Int, Float, Double, Byte в лист не засунуть.
А вот String пожалуйста. Можешь делать так:
Local str:String
str[0] = 100500 'твоё число
List.AddLast(str)

Потом извлекать:
Local number:Int = Int(List.ValueAtIndex(0)[0])
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nerd (27.06.2011)
Ответ


Опции темы

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

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


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


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