Строка выше ведь делает его активным.
Это я понял, но
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 » Вопросы новичка (продолжение…)