|
06.02.2012, 22:59
|
#1
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Глупый вопрос.
Знаю, вопрос глупый, но всё равно пожалуйста ответьте. Я пытаюсь портировать проект из Blitz3D в BlitzMax. Конечно, я подумал что всё будет просто:
1).ctrl+c
2).ctrl+v
3).????
4).PROFIT
А получилось совсем не так. Что-то с типами видимо по-другому. Как я понял, на BlitzMax нету For ...=Each ... .В общем, в этом и есть вопрос: как на BlitzMax писать цикл для перебора всех элементов типа?
|
(Offline)
|
|
06.02.2012, 23:08
|
#2
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Глупый вопрос.
Всё в BMax есть, вот только список для своих типов надо создавать самостоятельно.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.02.2012, 00:15
|
#3
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Глупый вопрос.
Шаблон:
Type Banana
Global lst:TList = New TList
'тут поля
Method New()
lst.AddLast(Self)
EndMethod
Method Delete() 'Вот эта штука глючна, и если компилятор даёт ошибку, её надо переименовать
lst.Remove(Self)
EndMethod
EndType
'Пример цикла
For bana:Banana = EachIn Banana.lst
Next
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.02.2012, 20:17
|
#4
|
|
Ответ: Глупый вопрос.
Method Delete() 'Вот эта штука глючна, и если компилятор даёт ошибку, её надо переименовать
lst.Remove(Self)
EndMethod
Оно не глючно. Просто этот кусок кода противоречит логике здравого смысла.
|
|
|
Сообщение было полезно следующим пользователям:
|
|
21.02.2012, 15:40
|
#5
|
Элита
Регистрация: 16.01.2008
Сообщений: 1,800
Написано 958 полезных сообщений (для 3,833 пользователей)
|
Ответ: Глупый вопрос.
Nerd96
'Пример цикла
For bana:Banana = EachIn Banana.lst
Next
|
эмм....плохой пример, перебирать нужно так :
For banana : Banana = EachIn lst
next
Вообще рекомендую для выработки нормально почерка к "типу" всегда добавлять приставочку "Type":
Вместо - banana : Banana
Будет читатся лучше - banana : Banana_Type
Так же и с листами....но это конечно личное дело каждого.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Dzirt за это полезное сообщение:
|
|
26.03.2012, 00:42
|
#6
|
|
Ответ: Глупый вопрос.
>> к "типу" всегда добавлять приставочку "Type": Banana_Type
хмм... а вообще то принято именовать так : TBanana
|
|
|
27.04.2012, 23:16
|
#7
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Глупый вопрос.
Function Draw_world()
For i=camera_x/16 To (camera_x+R1)/16
For i1=camera_y/16 To (camera_y+R2)/16
DrawImage(block[map[i,i1]],i*16-camera_x,i1*16-camera_y,0)
Next
Next
DrawImage player_image,R1/2,R2/2
End Function
Решил поиграться с Максом и опять наткнулся на проблему. Гонит на: DrawImage(block[map[i,i1]],i*16-camera_x,i1*16-camera_y,0). Вот как гружу картинки:
Global block[200]
block[0]=LoadImage("images\sky.png")
block[1]=LoadImage("images\ground.png")
|
(Offline)
|
|
28.04.2012, 05:14
|
#8
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Глупый вопрос.
Чё говорит хоть? "Attempt to index array element beyond array length"?
Сделай вывод в дебаг индексов и идентификатора картинки
DebugLog i+","+i1+","+map[i,i1]
После цикла рисования поставь DebugStop.
Ещё: напиши в самом начале кода SuperStrict, он тебе добрую службу сослужит. (типы переменных указать попросит, а это очень полезно делать)
Для картинок есть тип TImage, вот как с массивом надо:
Global block:TImage[200]
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.04.2012, 08:51
|
#9
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Глупый вопрос.
Ага, то есть если я не укажу тип картинки этому массиву, он автоматически ему не присвоится как в блитц3Д?
Вот что пишет: Unhandled Exception: Attempt to access field or method of Null object.
|
(Offline)
|
|
28.04.2012, 11:06
|
#10
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Глупый вопрос.
Присвоится, но будет присвоено INT'овое число, и нужно будет память вручную очищать от таких картинок, в хелпе так сказано. А если нормальный тип укажешь TImage, то достаточно написать img = null и сборщик мусора сам удалит из памяти эту картинку.
По ошибке ясно, экземпляр не создан. Выведи дебагом индексы и всё поймёшь.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.04.2012, 11:38
|
#11
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Глупый вопрос.
ничего все равно не понимаю. Картинка есть, это точно.
|
(Offline)
|
|
28.04.2012, 12:25
|
#12
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Глупый вопрос.
В справке почитай: Help \ Tutorials and articles \ BlitzMax overview, там первая же статья с названием
BlitzMax Memory management - or, "where did Delete go?!?"
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.04.2012, 13:13
|
#13
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Глупый вопрос.
Я про ошибку
Теперь вообще обнаружил что не могу картинки рисовать.
Последний раз редактировалось Nikich, 28.04.2012 в 14:31.
|
(Offline)
|
|
28.04.2012, 17:08
|
#14
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Глупый вопрос.
Всё, понял. Дело было в "Graphics": теперь нельзя писать Graphics 0,0.
Но вопрос всё равно есть: а как же тогда поставить всё на нынешние настройки? То есть так, чтобы программа была на ширину, высоту экрана.
И попутно ещё вопрос. Как повернуть, увеличить, поставить альфу именно данной картинки? Мне не нужно все вращать, мне б только ГГ повернуть, а тут выясняется что старый добрый RotateImage не пашет
Последний раз редактировалось Nikich, 28.04.2012 в 18:31.
|
(Offline)
|
|
28.04.2012, 19:02
|
#15
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Глупый вопрос.
Сообщение от Nikich
И попутно ещё вопрос. Как повернуть, увеличить, поставить альфу именно данной картинки? Мне не нужно все вращать, мне б только ГГ повернуть, а тут выясняется что старый добрый RotateImage не пашет
|
Перед рисование картинки делай что надо (SetRotation,SetAlpha,SetScale), а после рисования ставь все это дело в ноль (0) для того чтобы это не влияло на след. картинки.
While Not KeyHit (KEY_ESCAPE)
Cls ()
SetRotation 90.0
DrawImage ...
SetRotation 0.0
Flip
GCCollect ()
Wend
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:18.
|