Продолжим нашу серию уроков.
Сейчас начнём создавать функцию, которая позволит нам управлять редактором карт.
Разместите где-нибудь в исходном коде текст:
function controls()
end function
Это будет заготовка для нашей функции.
Как же мы будем управлять редактором? Всё просто. С помощью нажатии определённой комбинации клавиш (в моём простом редакторе - от 0 до 9), "кисти" присвоится особое значение, которое присвоится тайлу, при нажатии на него курсором.
Для этого используем инструкцию:
if keydown(key_X) current_tile = X, где X - номер нажатой клавиши.
Пропишем этот код в функции для всех 10 клавиш.
if keydown(key_0) current_tile = 0
if keydown(key_1) current_tile = 1
...
if keydown(key_9) current_tile = 9
Функция keydown(X) проверяет, нажата ли клавиша Х, если клавиша нажата - возвращает 1.
Также добавим код, который позволит присвоить ячейке массива (тайлу) map[x,y] значение, равное "кисти" при нажатии на тайл.
If (MouseDown(1) And MouseX()>0 And MouseY()>0 And MouseX()<g_screen_width And MouseY()<g_screen_heigth)
map[Int(MouseX()/40),Int(MouseY()/40)]=current_tile
EndIf
В условии проверяется, нажата ли мышь на окне редактора, в котором отрисована сетка. Если да - то элементу массива карты присваивается значение current_tile.
Int(Х) - возвращает целое число от Х. MouseX()/40 - возвращает текущее положение курсора мыши по оси Х, делённое на сорок. То же самое и с MouseY()/40.
Если вам непонятно, как всё это связано между собой, то почитайте вступление, там описан принцип работы карты.
Добавим напоследок код:
If KeyDown(key_s) savemap()
Savemap() - функция, сохраняющая карту в текстовый файл. Её мы создадим позднее.
Весь исходный код функции controls():
Function controls()
If KeyDown(key_0) current_tile = 0
If KeyDown(key_1) current_tile = 1
If KeyDown(key_2) current_tile = 2
If KeyDown(key_3) current_tile = 3
If KeyDown(key_4) current_tile = 4
If KeyDown(key_5) current_tile = 5
If KeyDown(key_6) current_tile = 6
If KeyDown(key_7) current_tile = 7
If KeyDown(key_8) current_tile = 8
If KeyDown(key_9) current_tile = 9
If MouseDown(1) And MouseX()>0 And MouseY()>0 And MouseX()<g_screen_width And MouseY()<g_screen_heigth
map[Int(MouseX()/40),Int(MouseY()/40)]=current_tile
EndIf
If KeyDown(key_s) savemap()
End Function
Вставьте это код, к примеру, после создания функции initmap().
***
Сейчас начнём создавать функцию, которая позволит нам управлять редактором карт.
Разместите где-нибудь в исходном коде текст:
function controls()
end function
Это будет заготовка для нашей функции.
Как же мы будем управлять редактором? Всё просто. С помощью нажатии определённой комбинации клавиш (в моём простом редакторе - от 0 до 9), "кисти" присвоится особое значение, которое присвоится тайлу, при нажатии на него курсором.
Для этого используем инструкцию:
if keydown(key_X) current_tile = X, где X - номер нажатой клавиши.
Пропишем этот код в функции для всех 10 клавиш.
if keydown(key_0) current_tile = 0
if keydown(key_1) current_tile = 1
...
if keydown(key_9) current_tile = 9
Функция keydown(X) проверяет, нажата ли клавиша Х, если клавиша нажата - возвращает 1.
Также добавим код, который позволит присвоить ячейке массива (тайлу) map[x,y] значение, равное "кисти" при нажатии на тайл.
If (MouseDown(1) And MouseX()>0 And MouseY()>0 And MouseX()<g_screen_width And MouseY()<g_screen_heigth)
map[Int(MouseX()/40),Int(MouseY()/40)]=current_tile
EndIf
В условии проверяется, нажата ли мышь на окне редактора, в котором отрисована сетка. Если да - то элементу массива карты присваивается значение current_tile.
Int(Х) - возвращает целое число от Х. MouseX()/40 - возвращает текущее положение курсора мыши по оси Х, делённое на сорок. То же самое и с MouseY()/40.
Если вам непонятно, как всё это связано между собой, то почитайте вступление, там описан принцип работы карты.
Добавим напоследок код:
If KeyDown(key_s) savemap()
Savemap() - функция, сохраняющая карту в текстовый файл. Её мы создадим позднее.
Весь исходный код функции controls():
Function controls()
If KeyDown(key_0) current_tile = 0
If KeyDown(key_1) current_tile = 1
If KeyDown(key_2) current_tile = 2
If KeyDown(key_3) current_tile = 3
If KeyDown(key_4) current_tile = 4
If KeyDown(key_5) current_tile = 5
If KeyDown(key_6) current_tile = 6
If KeyDown(key_7) current_tile = 7
If KeyDown(key_8) current_tile = 8
If KeyDown(key_9) current_tile = 9
If MouseDown(1) And MouseX()>0 And MouseY()>0 And MouseX()<g_screen_width And MouseY()<g_screen_heigth
map[Int(MouseX()/40),Int(MouseY()/40)]=current_tile
EndIf
If KeyDown(key_s) savemap()
End Function
Вставьте это код, к примеру, после создания функции initmap().
***
Что за убогий язык Вы используете?
ОтветитьУдалитьБыть может, Вас научить писать на c#, java, c++?
Я умею (пусть и не очень хорошо) писать на С++, однако, даже используя простейшие графические движки, код программы на С++ будет гораздо длиннее, да и некоторым программистам (basic,java и др.) код будет непонятен.
УдалитьПоэтому я использую синтаксис BlitzMax, но лишь из-за того, что все стандартные функции в нём предельно просты и понятны даже по названию.
KeyDown - нажатие клавиши.
PlaySound - воспроизведение звука.
И так далее.
Да и код на BlitzMax'е получается "компактнее", но это моё мнение.
Вообще сперва планировал писать на алгоритмическом языке (ЕСЛИ условие СДЕЛАТЬ то-то), но передумал.