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

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

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

Ответ
 
Опции темы
Старый 06.02.2012, 22:59   #1
Nikich
Бывалый
 
Регистрация: 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
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Глупый вопрос.

Всё в BMax есть, вот только список для своих типов надо создавать самостоятельно.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (06.02.2012)
Старый 07.02.2012, 00:15   #3
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (07.02.2012)
Старый 12.02.2012, 20:17   #4
Черный крыс
 
Сообщений: n/a
Ответ: Глупый вопрос.

Method Delete() 'Вот эта штука глючна, и если компилятор даёт ошибку, её надо переименовать
lst.Remove(Self)
EndMethod
Оно не глючно. Просто этот кусок кода противоречит логике здравого смысла.
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nex (12.02.2012)
Старый 21.02.2012, 15:40   #5
Dzirt
Элита
 
Аватар для Dzirt
 
Регистрация: 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 за это полезное сообщение:
BlackOut (26.02.2012), Nikich (11.06.2012), SBJoker (21.02.2012)
Старый 26.03.2012, 00:42   #6
Черный крыс
 
Сообщений: n/a
Ответ: Глупый вопрос.

>> к "типу" всегда добавлять приставочку "Type": Banana_Type

хмм... а вообще то принято именовать так : TBanana
 
Ответить с цитированием
Старый 27.04.2012, 23:16   #7
Nikich
Бывалый
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (29.04.2012)
Старый 28.04.2012, 08:51   #9
Nikich
Бывалый
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (29.04.2012)
Старый 28.04.2012, 11:38   #11
Nikich
Бывалый
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (29.04.2012)
Старый 28.04.2012, 13:13   #13
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Глупый вопрос.

Я про ошибку
Теперь вообще обнаружил что не могу картинки рисовать.

Последний раз редактировалось Nikich, 28.04.2012 в 14:31.
(Offline)
 
Ответить с цитированием
Старый 28.04.2012, 17:08   #14
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Глупый вопрос.

Всё, понял. Дело было в "Graphics": теперь нельзя писать Graphics 0,0.
Но вопрос всё равно есть: а как же тогда поставить всё на нынешние настройки? То есть так, чтобы программа была на ширину, высоту экрана.
И попутно ещё вопрос. Как повернуть, увеличить, поставить альфу именно данной картинки? Мне не нужно все вращать, мне б только ГГ повернуть, а тут выясняется что старый добрый RotateImage не пашет

Последний раз редактировалось Nikich, 28.04.2012 в 18:31.
(Offline)
 
Ответить с цитированием
Старый 28.04.2012, 19:02   #15
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (29.04.2012)
Ответ


Опции темы

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

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


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


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