![]() |
Глупый вопрос.
Знаю, вопрос глупый, но всё равно пожалуйста ответьте. Я пытаюсь портировать проект из Blitz3D в BlitzMax. Конечно, я подумал что всё будет просто:
1).ctrl+c 2).ctrl+v 3).???? 4).PROFIT А получилось совсем не так. Что-то с типами видимо по-другому. Как я понял, на BlitzMax нету For ...=Each ... .В общем, в этом и есть вопрос: как на BlitzMax писать цикл для перебора всех элементов типа? |
Ответ: Глупый вопрос.
Всё в BMax есть, вот только список для своих типов надо создавать самостоятельно.
|
Ответ: Глупый вопрос.
Шаблон:
Код:
Type Banana |
Ответ: Глупый вопрос.
Код:
Method Delete() 'Вот эта штука глючна, и если компилятор даёт ошибку, её надо переименовать |
Ответ: Глупый вопрос.
Nerd96
Цитата:
Код:
For banana : Banana = EachIn lst Вместо - banana : Banana Будет читатся лучше - banana : Banana_Type Так же и с листами....но это конечно личное дело каждого. |
Ответ: Глупый вопрос.
>> к "типу" всегда добавлять приставочку "Type": Banana_Type
хмм... а вообще то принято именовать так : TBanana |
Ответ: Глупый вопрос.
Код:
Function Draw_world() Код:
Global block[200] |
Ответ: Глупый вопрос.
Чё говорит хоть? "Attempt to index array element beyond array length"?
Сделай вывод в дебаг индексов и идентификатора картинки DebugLog i+","+i1+","+map[i,i1] После цикла рисования поставь DebugStop. Ещё: напиши в самом начале кода SuperStrict, он тебе добрую службу сослужит. (типы переменных указать попросит, а это очень полезно делать) Для картинок есть тип TImage, вот как с массивом надо: Global block:TImage[200] |
Ответ: Глупый вопрос.
Ага, то есть если я не укажу тип картинки этому массиву, он автоматически ему не присвоится как в блитц3Д?
Вот что пишет: Unhandled Exception: Attempt to access field or method of Null object. |
Ответ: Глупый вопрос.
Присвоится, но будет присвоено INT'овое число, и нужно будет память вручную очищать от таких картинок, в хелпе так сказано. А если нормальный тип укажешь TImage, то достаточно написать img = null и сборщик мусора сам удалит из памяти эту картинку.
По ошибке ясно, экземпляр не создан. Выведи дебагом индексы и всё поймёшь. |
Ответ: Глупый вопрос.
ничего все равно не понимаю. Картинка есть, это точно.
|
Ответ: Глупый вопрос.
В справке почитай: Help \ Tutorials and articles \ BlitzMax overview, там первая же статья с названием
Код:
BlitzMax Memory management - or, "where did Delete go?!?" |
Ответ: Глупый вопрос.
Я про ошибку:)
Теперь вообще обнаружил что не могу картинки рисовать. |
Ответ: Глупый вопрос.
Всё, понял. Дело было в "Graphics": теперь нельзя писать Graphics 0,0.
Но вопрос всё равно есть: а как же тогда поставить всё на нынешние настройки? То есть так, чтобы программа была на ширину, высоту экрана. И попутно ещё вопрос. Как повернуть, увеличить, поставить альфу именно данной картинки? Мне не нужно все вращать, мне б только ГГ повернуть, а тут выясняется что старый добрый RotateImage не пашет:( |
Ответ: Глупый вопрос.
Цитата:
Код:
While Not KeyHit (KEY_ESCAPE) |
Ответ: Глупый вопрос.
А не геморрой ли это часом?
|
Ответ: Глупый вопрос.
Это удобно если не говнокодить.
|
Ответ: Глупый вопрос.
Ну ладно, пока вроде с быстродействием проблем нету. Но вопрос про аналог Graphics 0,0 все еще актуален.
|
Ответ: Глупый вопрос.
Цитата:
функции DesktopWidth и DesktopHeight |
Ответ: Глупый вопрос.
Большое спасибо!
|
Ответ: Глупый вопрос.
Что-то с математикой в Максе. Почему-то, я не могу сделать вот так:
a=1/x Приходится делать: a=x^-1. Вообще деления не очень работают. a/24, пришлось изменить на a*0.04. Проблема не существенная, но интересно с чем это связано. |
Ответ: Глупый вопрос.
Это связано с тем, что перемнные правильно объявлять надо.
a# или a:Float Вроде уже говорили что тебе нужно использовать SuperStrict. |
Ответ: Глупый вопрос.
Не-не-не, не в этом дело. Если бы было в этом, то у меня бы и умножить не работало бы.
З.Ы. флоат у меня указан, не дурак:) |
Ответ: Глупый вопрос.
Работает, если одно из чисел флоат. a*0.04 - тут есть флоат, а вот a/24 тут нет.
|
Ответ: Глупый вопрос.
NitE имеет ввиду вот что: при работе с дробным числам надо указывать всё как флоат, для чисел это добавление точки в конце (вместо 24 писать 24.0), а для инт'овых переменных делать Float(intValue).
x# = 24 a# = 1.0/x b% = 99 c# = a*Float(b) |
Ответ: Глупый вопрос.
А-а-а, точно. С умножением я догадался что флоат поставить нужно, а вот про 1.0 - нет. Спасибо!
|
Ответ: Глупый вопрос.
Ребята, объясните, в чем проблема со списками.
Код:
temp:Type=new Type Однако, если в самом начале, заполнить список двумя объектами, все будет работать. В чем проблема и как ее исправить? |
Ответ: Глупый вопрос.
Твой код ужасен, ты не понимаешь сути For-Each
Он перебирает все элементы с первого по последний, и используется восновном для выполнения однотипного действия со семи элементами списка. Но не для модифицирования списка. Кроме того проход по списку будет в границах изначального списка, и не будет учитывать новые элементы. Таким образом в конце твоего кода в списке будет два элемента. |
Ответ: Глупый вопрос.
Он великолепно работает с новыми элементами. Если в самом начале, добавить в список не один элемент, а два - все будет работать, список будет увеличиваться и работать с новыми элементами. Но создавать по два элемента ужасно, поэтому я и прошу помощи.
|
Ответ: Глупый вопрос.
Как я уже написал, цикл For...Each неправильно применять для модификации итерируемого списка. Потому что вы не владеете механизмом итерирования он скрыт от вас. Хотите контроля - используйте простой For...Next.
Почему работает с двумя начальными элементами, а не работает с одним? Вероятно алгоритм итерирования такой: в строке For...Each берется первый элемент First и выдаётся в переменную, и тут же итератор переходит на следующий элемент. В случае если в списке 1 элемент то итератор указывает на элемент - конец списка. Добавление нового элемента происходит перед концом списка. Если два элемента, то итератор указывает на второй элемент. И новый элемент добавится после него. Что позволит снова перейти на него в следующей итерации. В строке Next происходит сравнение итератора с концом списка, элементы совпали - цикл завершен. |
Ответ: Глупый вопрос.
Огромное спасибо за подробное объяснение!
|
Часовой пояс GMT +4, время: 03:38. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot