forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Опять проблемы. (http://forum.boolean.name/showthread.php?t=16119)

FireOwl 15.01.2012 19:11

Ответ: Опять проблемы.
 
Выходит, что так.

Nikich 15.01.2012 20:01

Ответ: Опять проблемы.
 
Код:

Function UpdateStones()
        For m.Main=Each Main
                DrawImage m\stone, m\x, m\y
            distance=Sqr((m\x-x)*(m\x-x)+(m\y-y)*(m\y-y)) 
                If ImagesCollide (cursor,mx,my,0,m\stone,m\x, m\y,0) And LClick=2
                        m\life=m\life-1
                        lol=1
                EndIf
       
                If m\life=0
                        FreeImage m\stone
                        Delete m
                EndIf
        Next
                If KeyDown(2) Then
                m.Main= New Main
                m\x=MouseX()
                m\y=MouseY()
                m\stone=LoadImage("stone.bmp")
                EndIf               
End Function

Опять что-то не так. Камень всё время двигается за мышкой:(

FireOwl 15.01.2012 20:18

Ответ: Опять проблемы.
 
А ты уверен, что это происходит здесь? Вряд ли KeyDown(2) все время возвращает истину. Поищи по коду, "закоментируй" подозрительные инструкции и т.д.

Nikich 15.01.2012 20:28

Ответ: Опять проблемы.
 
Да, это здесь, я только здесь писал. На счёт KeyDown(2) да, не всегда истинна но это легко исправляется. Например:
Код:

Function UpdateStones()
        For m.Main=Each Main
                DrawImage m\stone, m\x, m\y
            distance=Sqr((m\x-x)*(m\x-x)+(m\y-y)*(m\y-y)) 
                If ImagesCollide (cursor,mx,my,0,m\stone,m\x, m\y,0) And LClick=2
                        m\life=m\life-1
                        lol=1
                EndIf
       
                If m\life=0
                        FreeImage m\stone
                        Delete m
                EndIf
        Next
                If KeyDown(2) Then
                a=1
                endif
                if a=1 then
                m.Main= New Main
                m\x=MouseX()
                m\y=MouseY()
                m\stone=LoadImage("stone.bmp")
                EndIf               
End Function

Ну как-то так. Но тогда нажмёшь на "1", то камень появится на х и у мышки и будет за ней двигаться. Хотя он должен 1 раз взять и присвоить себе координаты мышки:(

FireOwl 15.01.2012 20:42

Ответ: Опять проблемы.
 
Зачем надо, чтобы всегда была истинна? Я просто предполагал причину появления камней.
Необходимо ведь, чтобы камень появился однократно?

А если при создании камня, сделать m\life, например, 100?

А KeyDown надо переделать на KeyHit.

Nikich 15.01.2012 21:07

Ответ: Опять проблемы.
 
Да, как раз в этом и была проблема. Он то создавался, но сразу рушился т.к. m\life был равен нулю:) Тогда такой способ, видимо, очень хорош в создании редакторов уровней. И клеточек нету, и сохранять удобно.

LLI.T.A.L.K.E.R. 15.01.2012 21:25

Ответ: Опять проблемы.
 
Цитата:

Сообщение от Nikich (Сообщение 216877)
То есть единственный способ это использовать after,before,first и last?

Обождите товарищи!
Делал я dll-ку - внесение списка типов в массив. В проверки выводил список обратно: были цифры 1,2,3 и т.д.
Значит брал я Entity из массива так
Terrain.WorldMap=Object.WorldMap(GetHandle(Obj))

Получается:
ТвойОбъект.ТвойТип=Object.ТвойТип(GetHandle(3))
выдаст объект под номером 3

Проверил:
Код:

Terrain.WorldMap=Object.WorldMap(GetHandle(2))
PositionEntity Terrain\mesh,-5,-1,-5

да он переместился!

Так, стоп!
GetHandle() это моя личная функция (которой нет в B3D), для вывода из номера ячейки..

Ну если очень нужно, то выход будет - делать массив с Handle на объекты.

LLI.T.A.L.K.E.R. 15.01.2012 21:48

Ответ: Опять проблемы.
 
Цитата:

Сообщение от Nikich (Сообщение 216896)
Да, как раз в этом и была проблема. Он то создавался, но сразу рушился т.к. m\life был равен нулю:) Тогда такой способ, видимо, очень хорош в создании редакторов уровней. И клеточек нету, и сохранять удобно.

Напиши подробно что ты хочешь сделать (какую игру).. Для чего камни, что с ними делать. Какой игрок и управление и т.п.
Дай исходник, чтобы попробовать сделать по-своему..
Потом посмотрим на решения (но чтобы не брать готовое, а посмотреть как нужно было делать).

Nikich 15.01.2012 22:31

Ответ: Опять проблемы.
 
Жанр - tds. Игра будет как Stranded 2, только вид сверху. Но строительство будет ближе к Minecraft'y, то есть квадратиками. Сейчас самое важное добавить в игру инвентарь. Исходники смогу дать только завтра. Ну, а камни для строительства или создания вещей.

Nikich 15.01.2012 23:30

Ответ: Опять проблемы.
 
Исходник и все файлы.

Crayzi 16.01.2012 08:57

Ответ: Опять проблемы.
 
Код:

Function UpdateStones()
        For m.Main=Each Main
                DrawImage m\stone, m\x, m\y
            distance=Sqr((m\x-x)*(m\x-x)+(m\y-y)*(m\y-y)) 
                If ImagesCollide (cursor,mx,my,0,m\stone,m\x, m\y,0) And LClick=2
                        m\life=m\life-1
                        lol=1
                EndIf
       
                If m\life=0
                        FreeImage m\stone
                        Delete m
                EndIf
        Next
                If KeyDown(2) Then
                a=1
                else
                a=0

                endif
                if a=1 then
                m.Main= New Main
                m\x=MouseX()
                m\y=MouseY()
                m\stone=LoadImage("stone.bmp")
                EndIf               
End Function

А лучше KeyDown(2) замени на KeyHit(2)... если не хочеш случайно камни пачками штамповать...
П.с. вот чуть лучше по моим соображениям, если я правильно понял что ты от функции хочеш ))
Код:

Global Images%[10];прозапас чуть больше чем надо...
Images[0]=LoadImage("stone.bmp")

Function UpdateStones()
        For m.Main=Each Main
                DrawImage Images[0], m\x, m\y
            distance=Sqr((m\x-x)*(m\x-x)+(m\y-y)*(m\y-y)) 
                If ImagesCollide (cursor,mx,my,0,m\stone,m\x, m\y,0) And LClick=2
                        m\life=m\life-1
                        lol=1
                EndIf
       
                If m\life=0
                        FreeImage m\stone
                        Delete m
                EndIf
        Next
        If KeyHit(2)
                m.Main= New Main
                m\x=MouseX()
                m\y=MouseY()
                m\life=10;Думаю ты чёто забыл))
        EndIf               
End Function


Crayzi 16.01.2012 09:16

Ответ: Опять проблемы.
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 216899)

Так, стоп!
GetHandle() это моя личная функция (которой нет в B3D), для вывода из номера ячейки..

В B3D все есть (Правда называется она Handle%(Тип%) ):
Код:

Global ClientsHandles[10]
Type Client
        Field Login$
End Type

For Clients%=0 to 10;Создадим 10 игроков и присвоим им имена Player #0...Player #10.
        CrP.Client=New Client
        CrP\Login$="Player #"+Clients%
        ClientsHandles[Clients]=Handle(CrP)
next

For Clients%=0 to 10;Напечатаем имена всех игроков на экране.
        Test.Client=Object.Client(ClientsHandles[Clients%])
        If Test<>Null;Если не уверен что объект существует то проверяй его наличие, иначе будет Mav...
          Print Test\Login$
        EndIf
Next
Test.Client=Object.Client(ClientsHandles[5]);Напечатаем имя игрока хэндл какого находится в ClientsHandles[5]
If Test<>Null
  Print Test\Login$
EndIf

waitkey()


FireOwl 16.01.2012 09:32

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

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

Nex 16.01.2012 09:42

Ответ: Опять проблемы.
 
Цитата:

For Clients%=0 to 10
Создаст 11.
Надо так
Цитата:

For Clients%=1 to 10

Crayzi 16.01.2012 09:46

Ответ: Опять проблемы.
 
Цитата:

Сообщение от Nex (Сообщение 216931)
Создаст 11.
Надо так

Я просто не стал заморачиватся)))


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

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