Строка выше ведь делает его активным.
Это я понял, но
SetGadgetState(1, a)
ни на что не влияет.
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)
Строка выше ведь делает его активным.
Это я понял, но
SetGadgetState(1, a)
ни на что не влияет.
OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ComboBoxGadget(1, 10, 40, 250, 21) For a = 1 To 5 AddGadgetItem(1, -1,"ComboBox item " + Str(a)) SetGadgetState(1, a-1) Debug GetGadgetText(1) Debug GetGadgetState(1) Next SetGadgetState(1, 0) ; set (beginning with 0) the third item as active one Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Подскажите пожалуйста, как определить, что форма моего приложения активна.
Если ни одно окно программы не активно, то событий окон не будет. Думаю это понятно.
А так есть функции EventWindow() и GetActiveWindow().
При заливке картинки .bmp в окно, картинка очень сильно мерцает, возможно это исправить ?
При заливке картинки .bmp в окно, картинка очень сильно мерцает, возможно это исправить ?
Код увидеть можно?
Код увидеть можно?
Создаю игру, так что код длинный
UsePNGImageDecoder()
v = 0
z = 0
a = 10
#Sprite = 0
If InitSprite() = 0
EndIf
If InitSound()
CatchSound(1, ?SoundFile)
DataSection
SoundFile:
IncludeBinary "untitled.wav"
EndDataSection
CatchSound(2, ?SoundFile2)
DataSection
SoundFile2:
IncludeBinary "SP0000.wav"
EndDataSection
CatchImage (0, ?Logo)
DataSection
Logo: IncludeBinary "Безымянный123.bmp"
EndDataSection
CatchImage (2, ?Logo2)
DataSection
Logo2: IncludeBinary "Досылатель.png"
EndDataSection
CatchImage (3, ?Logo3)
DataSection
Logo3: IncludeBinary "Стереотруба.png"
EndDataSection
CatchImage (4, ?Logo4)
DataSection
Logo4: IncludeBinary "база.bmp"
EndDataSection
EndIf
If OpenWindow(0, 0, 0, 300, 600, "Game", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Screen_WaitSynchronization)
SmartWindowRefresh(0, 1)
If OpenWindowedScreen(WindowID(0), 0, 0, 300, 570, 0, 0, 0, #PB_Screen_WaitSynchronization)
CreateSprite(1, 5, 20)
If StartDrawing(SpriteOutput(1))
Box(0, 0, 3, 20, RGB(150, 75, 0))
StopDrawing()
EndIf
EndIf
EndIf
Repeat
Event = WindowEvent()
TextGadget(5, 240, 580, 500, 15, "Score: " +Str(a))
FlipBuffers()
ClearScreen(RGB(255, 255, 255))
ImageGadget(4, 0, 430, 100, 530, ImageID(4))
ImageGadget(0, x, y, 23, 28, ImageID(0))
DisplaySprite (1, x1, y1)
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - direction
y1 - b
y1 - b
y1 - b
y1 - b
y1 - b
y1 - b
y + direction
direction = 1
Delay(30)
If event = #PB_Event_Gadget
If EventGadget () = 0
x1 = x + 15
y1 = 530
PlaySound(2)
EndIf
EndIf
If z = 5
y = -100
TextGadget(4, 10, 10, 500, 15, "Игра приостановлена")
ImageGadget(2, 10, 25, 43, 40, ImageID(2))
ImageGadget(3, 60, 25, 34, 43, ImageID(3))
If event = #PB_Event_Gadget
If EventGadget () = 2
b = direction
z - 5
y = 20
EndIf
EndIf
If event = #PB_Event_Gadget
If EventGadget () = 3
v - 80
z - 5
EndIf
EndIf
If a < 70
direction = 1
TextGadget (1, 10, 580, 35, 15, "Level 1")
EndIf
If a > 70
If a <= 150
EndIf
direction = 2
y1 + direction
y1 + direction
y1 + direction
y1 + direction
y1 + direction
y1 + direction
TextGadget (1, 20, 580, 35, 15, "Level 2")
EndIf
If a > 150
If a <= 300
If x < -20
x = 220
EndIf
direction = 3
TextGadget (1, 30, 580, 35, 15, "Level 3")
EndIf
EndIf
If a > 300
If a <= 450
If x > 220
x = -20
EndIf
direction = 4
TextGadget (1, 50, 580, 35, 15, "Level 4")
EndIf
EndIf
If a > 450
If a <= 600
direction = 5
TextGadget (1, 50, 580, 35, 15, "Level 5")
EndIf
EndIf
If a > 600
If a <= 750
If x < -20
x = 220
EndIf
direction = 6
TextGadget (1, 60, 580, 35, 15, "Level 6")
EndIf
EndIf
If a > 750
If a <= 900
If x > 220
x = -20
EndIf
direction = 7
TextGadget (1, 70, 580, 35, 15, "Level 7")
EndIf
EndIf
If a > 900
direction = 8
TextGadget (1, 80, 580, 35, 15, "Level 8")
EndIf
EndIf
If y1 - 50 < y
z + 1
a + 10
y1 = 10000
y = 20 + v
x = Random(230)
EndIf
If y > 260
MessageRequester ("Сообщение", "Вы проиграли")
End
EndIf
WaitWindowEvent ()
Until Event = #PB_Event_CloseWindowС картинками было бы нитересней.
С картинками было бы нитересней.
http://s018.radikal.ru/i513/1211/b9/1dce6668cbd9.bmp
http://s16.radikal.ru/i190/1211/81/a6114ff8b406.png
http://s018.radikal.ru/i522/1211/6c/aff73c01028e.png
Да и
CatchImage (4, ?Logo4)
DataSection
Logo4: IncludeBinary "база.bmp"
EndDataSection
можно удалить
Отредактировано Foreword (23.11.2012 20:18:44)
Могу ошибаться:
не, теперь вообще не работает
Добавил это:
Window = EventWindow() Gadget = EventGadget()
стало лучше, но на сколько я знаю, все гаджеты должны создоваться до главного цикла.
Добавил это:
стало лучше, но на сколько я знаю, все гаджеты должны создоваться до главного цикла.
У меня почему-то не стало
Нельзя размещать гаджеты на графике. Они не совместимы на уровне ОС, поэтому и мерцание.
Картинки нужно загружать как спрайты и выводить в требуемых участках.
TextGadget() нужно заменить на это.
Procedure TextGadget_2D(x, y, Text.s)
If StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(x, y, Text)
StopDrawing()
EndIf
EndProcedureНельзя размещать гаджеты на графике. Они не совместимы на уровне ОС, поэтому и мерцание.
Картинки нужно загружать как спрайты и выводить в требуемых участках.
TextGadget() нужно заменить на это.
Я извиняюсь, я только неделю назад начал изучать язык программирования, можно как нибудь по подробней, что куда вставлять и заместь чего ?
Ну как-то так.
If InitSprite() = 0 Or InitKeyboard()=0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
Procedure TextGadget_2D(x, y, Text.s)
If StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(x, y, Text, 0)
StopDrawing()
EndIf
EndProcedure
OpenWindow(0, 0, 0, 340, 285, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 10, 70, 320, 200, 0, 0, 0)
If LoadSprite(0, "C:\Танк.bmp")=0
MessageRequester("", "Ошибка при загрузке картинки")
End
EndIf
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Event = 0 ; Quit the event loop only when no more events are available
; Clear the screen and draw our sprites
ClearScreen(RGB(128,128,128))
TextGadget_2D(10, 10, "1234")
TextGadget_2D(50, 40, "5678")
DisplaySprite(0, 80, 80)
DisplaySprite(0, 130, 20)
FlipBuffers() ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
ExamineKeyboard()
Until Quit Or KeyboardPushed(#PB_Key_Escape)Правда, лучше использовать PNG с прозрачностью.
Ну как-то так.
Правда, лучше использовать PNG с прозрачностью.
А клик по спрайтам писать через "SpriteCollision" ?
Можно и так сделать.
Просто есть много различных способов, а использование SpriteCollision() один из простейших.
Можно и так сделать.
Просто есть много различных способов, а использование SpriteCollision() один из простейших.
Можете написать парочку ? Буду очень благодарен. Через SpriteCollision много багов получается.
Как бы там ни было, нужно учитывать координаты курсора мышки и спрайта.
Можно сделать и без SpriteCollision(), но код усложнится.
С послепраздничками, дамы и господа! Просветите темного. Как организовать цепочку файлов? Т.е. чтобы можно было передать управление другому файлу с сохранением значений переменных и массивов. В Qbasic этим занималась команда CHAIN. А как это сделать в Purebasic? Заранее благодарен за дельные советы!
Подключаете исходный файл к основному, оператором XIncludeFile и вызываете процедуру из него, передавая через аргументы требуемые переменные, массивы и т. д. Если их (переменных массивов и т. д.) много, то логичнее их поместить в структуру, а процедуре передать указатель на нее.
О процедурах. http://pure-basic.narod.ru/docs/books/6.htm
Возможно ли написать ассемблер на PureBasic?
написать ассемблер на PureBasic?
Можно. Видел ассемблер с исходниками на Турбо Бэйсике.
( написал его мой земляк,Файфель Борис Леонидович, кандидат физико-математических наук, доцент)
А Пурик покруче будет.
Только вот какой в этом смысл? Тем более, что Пурик сам поддерживает ассемблерные вставки, так что можно писать ассемблерные программы прямо на нем.
Отредактировано ВиниПур (10.01.2013 19:48:39)
Петр, Спасибо! Пойду осмыслю... О процедурах читал раньше и активно использую их. Но меня пугают объемы сочиняемого мною кода. Он имеет вид алгоритма, в котором пользователь пошагово вводит данные. Отладка уже замучала. Много переменных и массивов (список условных обозначений всей программы занимает около 30 страниц). Я думал записывать результаты вычислений в отдельные файлы, а потом обращаться к ним из любого места. Может так и делать, а соединить файлы в 1 код на конечном этапе? Ну или "REMами" позабивать все. А большие структурные куски кода собирать в процедуры.
Тем более, что Пурик сам поддерживает ассемблерные вставки, так что можно писать ассемблерные программы прямо на нем.
Вот это уже интересно. Скажите, можно ли на нем написать загрузчик операционной системы?
можно ли на нем написать загрузчик операционной системы?
Написать можно. Скомпилировать, так что бы работало, нельзя.
В сети много примеров загрузчиков на FASM, MASM к примеру.
Там всего насколько строчек, разобраться в которых не составляет труда.
Прочитай хотя бы http://ass3mbler.narod.ru/Creat_OS1.txt и http://ass3mbler.narod.ru/Creat_OS2.txt
Зачем именно PureBasic можешь объяснить?
Много переменных и массивов
Помести их в структуру и тогда фактически будет всего одна переменная, которая предоставит доступ к остальным.
Ок, спасибо за совет.
Как запустить из программы на Пурике экзешник?
Как запустить из программы на Пурике экзешник?
RunProgram().
| Какая версия? | OffTop | 03.10.2021 |
| Мне постоянно пищет вот это | Вопросы по PureBasic | 14.10.2011 |
| Размер экрана в пикселях | Вопросы по PureBasic | 13.02.2011 |
| консоль | Вопросы по PureBasic | 19.03.2015 |
| Полноэкранные приложения на purebasic | Вопросы по PureBasic | 08.03.2011 |
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)