forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Вопрос-Ответ (для новичков BlitzMax) (http://forum.boolean.name/showthread.php?t=13756)

Greymem 02.12.2011 11:53

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от SBJoker (Сообщение 211961)
Тога придётся напрячь штуки из вашей подписи.

Установить хендл с минусом, прокрутить относительно произвольной точки, установить хендл в центр, прокрутить вокруг оси.
Прокатит? =)

SBJoker 02.12.2011 11:59

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Нет не прокатит.
Ты путаешь две вещи, вращение картинки, и перемещение картинки по кругу относительно какой либо точки.

Первое делается с помощью команд вращения картинки и если надо изменения хэндла картинки.

Второе обыкновенная математика и капля тригонометрии.

Greymem 05.12.2011 08:21

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Короче. То на то и выходит
Сначала вычисляем новые X,Y, обновляем месторасположение объекта с помощью функции которую я нашёл на оф форуме.
Потом только устанавливаем хендл, прокручиваем по своей оси, и уже получаем угол самого объекта, при неизменных координатах

Nerd 29.12.2011 17:53

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Код:

...
Global LUA:Byte Ptr
LUA = luaL_newstate()
lua_register(LUA,"SpawnPlayerL".ToCString(),SpawnPlayerL)
...
Function SpawnPlayerL:Int(l:Byte Ptr)
...

Ругается на lua_register "Cannot convert Byte Ptr to String", чяднт?

Nerd 30.12.2011 00:17

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Без ToCString нормально идёт, не верьте BlitzEtCetera!(пофиксил статью на ней)

Черный крыс 30.12.2011 01:01

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
На BlitzEtCetera все написано правильно.

Просто если ты передаешь литерал ( в виде "аля_что_то" ) то компилятор передаст прямой указатель, тоесть Сишную-строку.

Nex 07.06.2012 08:47

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Я тут в примере наткнулся на строчку кода и хочу узнать для чего так сделано? :)
Код:

Field NewConnectionCallback (Conn:TCPSocketConnection)
В примере используется Strict

Жека 07.06.2012 09:03

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Я посмотрел код примера, эти штуки являются callback'ами, в эти поля присваиваются имена функций, которые будут далее использоваться.
Крутая штука, я не знал что так можно.
Вот весь код:
Код:

Rem

        Title:  TCPSocket Server
       
        Author:  Jim Pishlo  (CoderLaureate)
                    ([email protected])
       
End Rem

Strict

Type TCPSocketServer
       
        'Properties
        Field MyPort:Int = 3849
        Field MySocket:TSocket
        Field MyStream:TSocketStream
        Field Connections:TList = New TList
        Field StopSeq:String = "~r~n"
       
        'Callback handles
        Field NewConnectionCallback(Conn:TCPSocketConnection)
        Field MsgRcvdCallback(Conn:TCPSocketConnection)
        Field LostConnectionCallback(Conn:TCPSocketConnection)

       
        'Constructor (for lack of a better word)
        Function Create:TCPSocketServer(_Port:Int = 3849)
                Local s:TCPSocketServer = New TCPSocketServer
                s.MyPort = _Port
                s.MySocket = CreateTCPSocket()
                s.MyStream = CreateSocketStream(s.MySocket)
                s.MySocket.Bind(_Port)
                s.MySocket.Listen(0)
                Return s
        End Function
       
        'The main method.
        'Monitors connections and triggers events.
        Method Listen()
                Local newConn:TSocket = MySocket.Accept(0)
                If newConn <> Null Then
                        Local conn:TCPSocketConnection = TCPSocketConnection.Create(Self,newConn)
                        'Add the new connection to the collection
                        Connections.AddLast(conn)
                        'If a callback has been assigned call it.
                        If NewConnectionCallback <> Null Then
                                NewConnectionCallback(conn)        'Pass a refernce to the new connection
                        End If
                End If
               
                'Clean up closed connections
                For Local c:TCPSocketConnection = EachIn Connections
                        If Not c.MySocket.Connected() Then
                                If LostConnectionCallback <> Null Then
                                        LostConnectionCallback(c)
                                End If
                                Connections.Remove(c)        'Remove connection from collection
                        End If
                Next
               
                'Receive Data from connections
                'Trigger callback if neccesary
                For Local c:TCPSocketConnection = EachIn Connections
                        If c.MySocket.Connected() Then
                                Local t:String = c.Receive()
                                If t <> "" Then
                                        If MsgRcvdCallback <> Null Then
                                                MsgRcvdCallback(c)
                                                c.Buffer = ""
                                        End If
                                End If
                        End If
                Next
        End Method
       
        Method Broadcast(Message:String, Conn:TCPSocketConnection = Null)
                If Conn <> Null Then
                        Conn.Send(Message)
                Else
                        Local c:TCPSocketConnection
                        For c = EachIn Connections
                                If c.MySocket.Connected() Then
                                        c.Send(Message)
                                End If
                        Next
                End If       
        End Method
       
End Type

Type TCPSocketConnection
        Field MyID:String
        Field MyServer:TCPSocketServer
        Field MySocket:TSocket
        Field MyStream:TSocketStream
        Field Buffer:String = ""
        Field StopSeq:String
       
        Function Create:TCPSocketConnection(s:TCPSocketServer, NewSocket:TSocket)
                Local c:TCPSocketConnection = New TCPSocketConnection
                c.MyServer = s
                c.MySocket = NewSocket
                c.MyStream = CreateSocketStream(c.MySocket)
                c.StopSeq = c.MyServer.StopSeq
                c.MyID = DottedIP(c.MySocket.RemoteIP())
                Return c
        End Function

        Method Send(Text:String)
                MySTream.WriteString(Text)
        End Method

        Method Receive:String()
                Local nBytes:Int = MySocket.ReadAvail()
                Local s:String = StopSeq
                If nBytes Then
                        Local in:String = ReadString(MyStream,nBytes)
                        Buffer:+ in
                        If Buffer.Length >= s.Length And Right$(Buffer,s.Length) = s Then
                                Local t:String = Buffer.Replace(s,"") 'Strip out the stop sequence
                                Return t
                        End If
                End If
        End Method
       
End Type


Function CreateTCPSocketServer:TCPSocketServer(_Port:Int = 3849)
        Return TCPSocketServer.Create(_Port)
End Function





'Test Code:  This is a simple Telnet Chat Server.  Run this program, then
'            open up a command prompt and type:

'                                Telnet localhost 3849
'
'                        You can telnet into this server from anywhere in the world
'            and do *very basic* text chatting.  To log in from another
'            computer, type:
'
'                                Telnet {host computer ip} 3849
'
'                        This is just a sample program to show you what you can do
'                        with the TCPSocketServer object.
'----------------------------------------------------------------------

'Create callback functions for interaction with the TCPSocketServer Object.

'Function to handle data recieved by server
'------------------------------------------
Function TextHandler(C:TCPSocketConnection)
        C.MyServer.BroadCast(C.MyID + ": " + C.Buffer)
End Function

'Greet new users and assign an ID
'--------------------------------
Function Greet(C:TCPSocketConnection)
        C.MyID = "User [" + MilliSecs() + "]"
        C.MyServer.BroadCast("Welcome!~r~n",C)
        C.MyServer.BroadCast(C.MyID + " has entered the room.~r~n")       
End Function

'Alert other users when a user leaves
'------------------------------------
Function LostConnection(C:TCPSocketConnection)
        C.MyServer.BroadCast("~r~n" + C.MyID + " has left the room.~r~n~r~n")
End Function

'Create an Instance of the TCPSocketServer Class
'-------------------------------------------------
Global Server:TCPSocketServer = CreateTCPSocketServer()

'Assign Function Pointers to Server's callback handles
'-----------------------------------------------------
Server.MsgRcvdCallback = TextHandler
Server.NewConnectionCallback = Greet
Server.LostConnectionCallback = LostConnection



'The Main Loop
'--------------
While Not KeyHit(KEY_ESCAPE)
        Server.Listen()                'That's it!
Wend


Nerd 07.06.2012 14:14

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
У кого есть откомпиленный модуль bah.cairo, плз, скиньте.

А то задолбался плясать с бубном :(
Цитата:

D:\BlitzMax\bin>bmk.exe makemods -a bah.cairo
Compiling:externs.bmx
flat assembler version 1.69.14 (710394 kilobytes memory)
4 passes, 22773 bytes.
Compiling:pixman-access.c
Compiling:pixman-access-accessors.c
Compiling:pixman-cpu.c
Compiling:pixman-gradient-walker.c
Compiling:pixman-region16.c
Compiling:pixman-region32.c
Compiling:pixman-image.c
Compiling:pixman-implementation.c
Compiling:pixman-combine32.c
Compiling:pixman-combine64.c
Compiling:pixman-general.c
Compiling:pixman.c
Compiling:pixman-fast-path.c
D:/BlitzMax/mod/bah.mod/cairo.mod/src/pixman/pixman-fast-path.c:1874: error: 'PI
XMAN_OP_' undeclared here (not in a function)
Build Error: failed to compile D:/BlitzMax/mod/bah.mod/cairo.mod/src/pixman/pixm
an-fast-path.c
D:\BlitzMax\bin>PAUSE
Для продолжения нажмите любую клавишу . . .

Пробовал подставлять другие версии pixman, не помогает.

Черный крыс 07.06.2012 14:28

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Компилятор споткнулся, так как в коде идет вызов\обращение к несуществующей метке.

Судя по названию "PIXMAN_OP_" - автор опечатался, попробуй заменить на "PIXMAP_OP_"

Nerd 07.06.2012 14:58

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 

Не, pixman - это название либы. Слова pixmap в коде нет.
Там код полон define'ов, поэтому невозможно понять где именно ошибка. Судя по тому, что в других версиях та же ошибка, это только у меня такое :(
Сам модуль брал отсюда - http://code.google.com/p/maxmods/dow...c.zip&can=2&q= и вроде там тоже никто не жаловался на ошибки.
А нет ли ещё модулей для рисования векторной графики?

Randomize 07.06.2012 22:10

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Maximus- the BlitzMax module manager
Скачивает, распаковывает, устанавливает с учётом зависимостей модули для BlitzMax. Всё что надо - иметь MinGW. Остальное эта прога сделает сама.

Nex 18.06.2012 06:49

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Как вращать картинку вокруг центра объекта со смещением по x/y?
(для раскуривания: есть объект, сбоку (по "-x") у него двигатель и надо прицепить туда партиклы.)
Через Sin и Cos получается крутить только по кругу. :(

FireOwl 18.06.2012 09:43

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 

Я тут поразмышлял немного, и выходит, что "двигатели" двигаются по своей окружности, центр которой в это время в свою очередь двигается по окружности :-) с разницей в 90 градусов от "главного" угла. Радиус меньшей окружности равен сдвигу по х двигателей относительно центра "корабля".

Nex 18.06.2012 11:30

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от FireOwl (Сообщение 230618)

Я тут поразмышлял немного, и выходит, что "двигатели" двигаются по своей окружности, центр которой в это время в свою очередь двигается по окружности :-) с разницей в 90 градусов от "главного" угла. Радиус меньшей окружности равен сдвигу по х двигателей относительно центра "корабля".

И? :-D


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

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