PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)


Вопросы новичка (продолжение…)

Сообщений 811 страница 840 из 961

811

Пётр написал(а):

Строка выше ведь делает его активным.

Это я понял, но

Код:
SetGadgetState(1, a)

ни на что не влияет.

0

812

Код:
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

0

813

Подскажите пожалуйста, как определить, что форма моего приложения активна.

0

814

Если ни одно окно программы не активно, то событий окон не будет. Думаю это понятно.
А так есть функции EventWindow() и GetActiveWindow().

0

815

При заливке картинки .bmp в окно, картинка очень сильно мерцает, возможно это исправить ?

0

816

Foreword написал(а):

При заливке картинки .bmp в окно, картинка очень сильно мерцает, возможно это исправить ?

Код увидеть можно?

0

817

max написал(а):

Код увидеть можно?


Создаю игру, так что код длинный

Код:
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

0

818

С картинками было бы нитересней.

0

819

max написал(а):

С картинками было бы нитересней.


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)

0

820

max написал(а):

Могу ошибаться:


не, теперь вообще не работает

0

821

Добавил это:

Код:
  Window = EventWindow() 
  Gadget = EventGadget()

стало лучше, но на сколько я знаю, все гаджеты должны создоваться до главного цикла.

0

822

max написал(а):

Добавил это:

стало лучше, но на сколько я знаю, все гаджеты должны создоваться до главного цикла.


У меня почему-то не стало

0

823

Нельзя размещать гаджеты на графике. Они не совместимы на уровне ОС, поэтому и мерцание.
Картинки нужно загружать как спрайты и выводить в требуемых участках.
TextGadget() нужно заменить на это.

Код:
Procedure TextGadget_2D(x, y, Text.s)
  If StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(x, y, Text)
    StopDrawing()
  EndIf
EndProcedure

0

824

Пётр написал(а):

Нельзя размещать гаджеты на графике. Они не совместимы на уровне ОС, поэтому и мерцание.
Картинки нужно загружать как спрайты и выводить в требуемых участках.
TextGadget() нужно заменить на это.


Я извиняюсь, я только неделю назад начал изучать язык программирования, можно как нибудь по подробней, что куда вставлять и заместь чего ?

0

825

Ну как-то так.

Код:
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 с прозрачностью.

0

826

Пётр написал(а):

Ну как-то так.

Правда, лучше использовать PNG с прозрачностью.


А клик по спрайтам писать через "SpriteCollision" ?

0

827

Можно и так сделать.
Просто есть много различных способов, а использование SpriteCollision() один из простейших.

+1

828

Пётр написал(а):

Можно и так сделать.
Просто есть много различных способов, а использование SpriteCollision() один из простейших.


Можете написать парочку ? Буду очень благодарен. Через SpriteCollision много багов получается.

0

829

Как бы там ни было, нужно учитывать координаты курсора мышки и спрайта.
Можно сделать и без SpriteCollision(), но код усложнится.

0

830

С послепраздничками, дамы и господа! Просветите темного. Как организовать цепочку файлов? Т.е. чтобы можно было передать управление другому файлу с сохранением значений переменных и массивов. В Qbasic этим занималась команда CHAIN. А как это сделать в Purebasic? Заранее благодарен за дельные советы!

0

831

Подключаете исходный файл к основному, оператором XIncludeFile и вызываете процедуру из него, передавая через аргументы требуемые переменные, массивы и т. д. Если  их (переменных массивов и т. д.) много, то логичнее их поместить в структуру, а процедуре передать указатель на нее.
О процедурах. http://pure-basic.narod.ru/docs/books/6.htm

0

832

Возможно ли написать ассемблер на PureBasic?

0

833

OPBR написал(а):

написать ассемблер на PureBasic?

Можно. Видел ассемблер с исходниками на Турбо Бэйсике.
( написал его мой земляк,Файфель Борис Леонидович, кандидат физико-математических наук, доцент)
А Пурик покруче будет. :cool:
Только вот какой в этом смысл? Тем более, что Пурик сам поддерживает ассемблерные вставки, так что можно писать ассемблерные программы прямо на нем.

Отредактировано ВиниПур (10.01.2013 19:48:39)

0

834

Петр, Спасибо! Пойду осмыслю... О процедурах читал раньше и активно использую их. Но меня пугают объемы сочиняемого мною кода.  Он имеет вид алгоритма, в котором пользователь пошагово вводит данные. Отладка уже замучала. Много переменных и массивов (список условных обозначений всей программы занимает около 30 страниц).  Я думал записывать результаты вычислений в отдельные файлы, а потом обращаться к ним из любого места. Может так и делать, а соединить файлы в 1 код на конечном этапе? Ну или "REMами" позабивать все. А большие структурные куски кода собирать в процедуры.

0

835

Тем более, что Пурик сам поддерживает ассемблерные вставки, так что можно писать ассемблерные программы прямо на нем.

Вот это уже интересно. Скажите, можно ли на нем написать загрузчик операционной системы?

0

836

OPBR написал(а):

можно ли на нем написать загрузчик операционной системы?

Написать можно. Скомпилировать, так что бы работало, нельзя.
В сети много примеров загрузчиков  на FASM, MASM к примеру.
Там всего насколько строчек, разобраться в которых не составляет труда.
Прочитай хотя бы http://ass3mbler.narod.ru/Creat_OS1.txt и http://ass3mbler.narod.ru/Creat_OS2.txt
Зачем именно PureBasic можешь объяснить?

0

837

Рома из Харькова написал(а):

Много переменных и массивов

Помести их в структуру и тогда фактически будет всего одна переменная, которая предоставит доступ к остальным.

0

838

Ок, спасибо за совет.

0

839

Как запустить из программы на Пурике экзешник?

0

840

OPBR написал(а):

Как запустить из программы на Пурике экзешник?

RunProgram().

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)