forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Консоль (http://forum.boolean.name/showthread.php?t=6260)

JoKeR_13 20.08.2008 13:19

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

HolyDel 20.08.2008 13:36

Ответ: Консоль
 
О_о.
консоль это нечто настолько сильно завязанное на конкретной игре, что думаю нет смысле писать либу.

пример прооооостейшей консоли есть тут:
http://www.forum.likosoft.ru/showthread.php?t=49

JoKeR_13 20.08.2008 13:50

Re: Консоль
 
а как сверху экрана затенить область? по нажатию тильды?

HolyDel 20.08.2008 14:10

Ответ: Консоль
 
используй FastDraw. рисуй черный прямоугольник с некой альфой.

ABTOMAT 20.08.2008 14:36

Ответ: Консоль
 
FastImage оно называется а не FastDraw :wallbash:

HolyDel 20.08.2008 14:43

Ответ: Консоль
 
точно, FastImage.

JoKeR_13 29.08.2008 17:29

Ответ: Консоль
 
Решил поделиться своей нароботкой.
Огромное СПАСИБО Grover за его статью в Blitz Et Cetera
В данном примере работают 2 команды
  1. help - выводит справку
  2. showfps true|false - отображение FPS (If shFPS=1 Then Text 0,0,"FPS: "+fps)
Для начала я об'являю переменные
Код:

; Консоль
Global ConsFlg=0
Const Kolcmd=9 ; количество отображаемых строк консоли
Dim  cmdbuff$(Kolcmd) ; ? Кол-во строк
Global shFPS=0; 0 - не показывать FPS, 1- показывать

Создаем основные функции
Код:

Function  InitConsole$()
    cur_pos%=Len(s$)
    view_text$=""
    X1=4
    gh=GraphicsHeight ()/2-8
    fh=FontHeight() +1
    strok%=(gh/fh)-1
    While Not KeyHit (28)
        Cls
        Color  200,200,200
        Rect 0,0,GraphicsWidth (),GraphicsHeight ()/2,1
        Color  0,0,0
        Rect 2,2,GraphicsWidth ()-4,GraphicsHeight ()/2-4,0
        For i=0 To strok-1
            Text 4,X1+(i*(FontHeight ()+1)),cmdbuff(i)
        Next
        view_text$=Left(s, cur_pos)
        view_text$=view_text$+"|"
        view_text$=view_text$+Right(s,Len (s)-cur_pos)
        Text 4,GraphicsHeight ()/2-4-20,">"+view_text
        Flip
        k=WaitKey ()
        Select  True
        Case (k>31) And (k<127)
            temp$=s$
            S$=Left (temp$,Cur_pos)+Chr(k)+Right (temp$,Len(temp$)-cur_pos)
            cur_pos=cur_pos+1
        Case  k=8
            If cur_pos<>0 Then
                temp$=s$
                s=Left (temp$,cur_pos-1)+Right (temp$,Len(temp$)-cur_pos)
                cur_pos=cur_pos-1
            EndIf
        Case k=4
            If cur_pos<>Len(s) Then
                temp$=s$
                s$=Left (temp$,cur_pos)+Right (temp$, Len(temp$)-cur_pos-1)
            EndIf
        Case k=31
            cur_pos=cur_pos-1
            If cur_pos<0 Then cur_pos=0
        Case k=30
            cur_pos=cur_pos+1
            If cur_pos>Len (s$) Then cur_pos=Len(s)
        Case k=1
            cur_pos=0
        Case k=2
            cur_pos=Len(s)
        End Select
    Wend
    Viewport 0,0,GraphicsWidth (),GraphicsHeight ()
    Return s$
End Function

; Обрабатываем команду из консоли
Function  CommandConsole(Cmd$)
    For i=0 To Kolcmd
        If cmdbuff(i)="" Then    Exit
    Next
    If i>Kolcmd Then
        Sdvig()
        i=Kolcmd
    EndIf   
    cmdbuff(i)=">"+Cmd$
    ; Обрабатываем команду
    Com$=ConsoleCMD$(cmd$)
    Param$=ConsoleCMDParam$(cmd$)
    Select  True
    Case Com="help"
        CommandConsole(">help, showfps")
    Case Com="showfps"
        If Param="true" Then
            shFPS=1
            CommandConsole(">FPS On")
        ElseIf  Param="false" Then
            shFPS=0
            CommandConsole(">FPS Off")
        Else
            CommandConsole(">Неверный параметр "+Param)       
        EndIf         
    End Select
End Function

; Сдвигаем матрицу команд
Function Sdvig()
    For i=0 To Kolcmd-1
        cmdbuff(i)=cmdbuff(i+1)
    Next
    cmdbuff(kolcmd)=""
End Function

; Вытаскиваем команду
Function ConsoleCMD$(cmd$)
    l=Instr(cmd," ",1)
    If l=0 Then
        Return cmd
    Else Return Left(cmd, l-1)
    EndIf
End Function

; Вытаскиваем параметры
Function ConsoleCMDParam$(cmd$)
    l=Instr(cmd," ",1)
    If (l=0) Or (l=Len(cmd)) Then
        Return ""
    Else Return Right (cmd,Len(cmd)- l)
    EndIf
End Function

В обработчике нажатия клавиш пишем следующую строку
Код:

If  KeyDown (87)=1 Then  CommandConsole(InitConsole$()); Отображаем консоль F11
Очень буду признателен за критику кода, но слишком на меня не нападайте плз.:user:


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot