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)

Nikich 16.01.2012 17:23

Ответ: Опять проблемы.
 
Так, у меня возникло два вопроса. Во-первых, можно ли как-нибудь оптимизировать тот код, который отвечает за поворот игрока в направление куда он идет? И как удобнее всего сделать бесконечный(почти бесконечный:) ) уровень? Мо моим соображениям надо делать 4 функции отвечающие за создание карты сверху,слева,справа,снизу от нынешней карты. Но я не знаю как сделать сохранение карты и последующую загрузку. Будет обидно если игрок застроит первую карту, пойдет на вторую, вернется, а там опять новая карта:)

Nikich 17.01.2012 21:50

Ответ: Опять проблемы.
 
И как сделать так, чтобы камни при создании не создавались друг в друге, и вообще не могли быть в друг друге?

FireOwl 18.01.2012 04:34

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

Nex 18.01.2012 06:55

Ответ: Опять проблемы.
 
Как то так. Писал в блокноте поэтому может быть не правильно.
Код:

For stone.stone = Each stone
        For stone2.stone = Each stone
                If MouseHit (1) Then
                        If stone2 <> stone Then
                                If Not ImagesCollide (stone\image,stone\x,stone\y,1,stone2\image,stone2\x,stone2\y,1) Then CreateStone (x#,y#)
                        End If
                End If
        Next
Next


FireOwl 18.01.2012 06:59

Ответ: Опять проблемы.
 
А зачем перебирать два раза список камней?
Создается один камень - и проверяется один раз по списку.
Подходит - добавляется в список.

Nikich 19.01.2012 00:25

Нет, мне не это надо. Когда карта генерируется, камни появляются в друг друге.

И можете подсказать что тут нет так?
Код:

Function DrawInventory()
For c.Inventory=Each Inventory
DrawImage c\image,c\x,100
Next
End Function


Function CreateInventory()
For a1=1 To 4
c.Inventory=New Inventory
c\x=c\x+72
c\id=1
c\image=LoadImage("cell.bmp")
Next
End Function

FPS резко падает до MAV. И ничего не рисуется. Проблема скорее всего в CreateInventory().

Crayzi 19.01.2012 01:26

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

Сообщение от Nikich (Сообщение 217182)
Нет, мне не это надо. Когда карта генерируется, камни появляются в друг друге.

И можете подсказать что тут нет так?
Код:

Function DrawInventory()
For c.Inventory=Each Inventory
DrawImage c\image,c\x,100
Next
End Function


Function CreateInventory()
For a1=1 To 4
c.Inventory=New Inventory
c\x=c\x+72
c\id=1
c\image=LoadImage("cell.bmp")
Next
End Function

FPS резко падает до MAV. И ничего не рисуется. Проблема скорее всего в CreateInventory().


А насколько часто ты вызываеш ф-цию CreateInventory()?
И ты точно уверен что именно эти ф-ции жрут память?

FireOwl 19.01.2012 01:31

Ответ: Опять проблемы.
 
А функция создания инвентаря случайно не из главного цикла вызывается?

Nikich 19.01.2012 09:53

Ответ: Опять проблемы.
 
Да, именно там:-D
У меня тут возникла идея о свете. Что если использовать не одну картинку травы на весь бэкграунд, а заместить ее большим количеством маленьких? Тогда используя трехмерный массив(х,у,light) можно сделать квадратное освещение. Но не будет ли это требовательно?

Nikich 19.01.2012 21:10

Ответ: Опять проблемы.
 
Инвентарь пока декорация:) Хотелось бы услышать, что изменить в камнях? Выглядят ли они как камни?

Nex 19.01.2012 21:36

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

Сообщение от Nikich (Сообщение 217238)
Инвентарь пока декорация:) Хотелось бы услышать, что изменить в камнях? Выглядят ли они как камни?

Сохраняй картинки в .png, курсор рисуй самым последним чтоб ничто его не перекрывало. Картинка камней подойдет если камни будут раза в два меньше размером. :)

Nikich 19.01.2012 21:42

Ответ: Опять проблемы.
 
А чем лучше .png?
Сейчас переделаю камни, но не будут ли они слишком маленькими?:) И ставить камни на "1", если кому-нибудь захочется:)
Вообще это как-то странно. У меня есть очень качественная текстура камня, но выглядит хуже чем эта в игре:) В общем сейчас дам две версии.

Nikich 19.01.2012 21:49

Ответ: Опять проблемы.
 
Версия с уменьшенными камнями, но увеличенным количеством камней(в 10 раз:) ).

FireOwl 19.01.2012 21:54

Ответ: Опять проблемы.
 
*.png весит меньше.
А если использовать Xors3D то можно будет добавить альфа-канал.

А что касается текстур - надо чтобы стиль совпадал. Сейчас нормально.
А если брать фотографичную текстуру, то надо и для всего остального подогнать аналогичные.

Nikich 19.01.2012 21:59

Ответ: Опять проблемы.
 
Спасибо за совет.
Сейчас наработал цикл для того, чтобы камни были вместе. Это не очень удобно так как, когда их много и они далеко друг от друга передвигаться почти невозможно.
Код:

For i=1 To imax
                m.Main=New Main
                m\stone=LoadImage("stone.bmp")
                stonex(i)=Int(Rnd(0,1280)/32)
                stoney(i)=Int(Rnd(0,1024)/32)
                If i Mod 2 = 0 Then
                chance=Rnd(3)
                If chance=1 Then
                stonex(i)=stonex(i-1)+1
                stoney(i)=stoney(i-1)+1
                EndIf
                If chance=2 Then
                stonex(i)=stonex(i-1)-1
                stoney(i)=stoney(i-1)-1
                EndIf
                EndIf
                m\x=stonex(i)*32
                m\y=stoney(i)*32
                m\life=10
               
        Next

Но всё равно, большие горы не получаются:) Может у кого-нибудь есть другие идеи?

Nikich 19.01.2012 22:31

Ответ: Опять проблемы.
 
А и забыл спросить, у кого какой FPS?

Nikich 19.01.2012 23:19

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

Function DrawInventory()
For cell.Inventory=Each Inventory
DrawImage cell\image,cell\x,920
For i=1 To 5
If cellid(i)=2 Then
DrawImage istone,cell\x+10,930
EndIf
Next
Next
End Function


Function CreateInventory()
For i=1 To 5
cell.Inventory=New Inventory
cell\x=fa
fa=fa+72
cell\id=1
cellid(i)=cell\id
cell\image=LoadImage("cell.bmp")
Next
End Function

Function AddItem(ItemId)
For i=1 To 5
If finish=0 Then
If cellid(i)=1 Then
cellid(i)=ItemId
finish=1
EndIf
EndIf
Next
End Function

Можете сказать, где тут ошибка? Проблема в том, что камень рисуется сразу во всех клеточках:)
Также, если всё пойдёт гладко, то на этих выходных можно будет доделать игру до демки:) Так называемая версия 0.0.1:cool:

Nex 19.01.2012 23:22

Ответ: Опять проблемы.
 
Вот почитай "Инвентарь". Только когда писал статью кодил хуже и поэтому наговнокодил, но полезной инфы можно подчернуть.

Nikich 19.01.2012 23:28

Ответ: Опять проблемы.
 
Я уже читал эту статью, благодаря ей я и понял основы:)
Хотелось по максимуму ужать код, но видимо не получилось:)
У меня почти всё правильно, так как клетке присваивается нужный id, но рисуется объект всё равно во всех:)

Nikich 19.01.2012 23:51

Ответ: Опять проблемы.
 
Всё, проблема решена. Почти все мои проблемы связаны с ошибкой в типах, и решаются использованием массивов:-D

Nikich 20.01.2012 17:40

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

        For i=1 To imax
                stonex(i)=Int(Rnd(0,1280)/32)
                stoney(i)=Int(Rnd(0,1024)/32)
        Next
        i=1
        While finish=0
        stonex(i+1)=stonex(i)+1
        stoney(i+1)=stoney(i)
        i=i+1
        If i Mod 4=0 Then
        stoney(i)=stoney(i)+1
        stonex(i)=stonex(i-Rnd(4))
        EndIf
        If i Mod 16=0 Then
        stonex(i)=Int(Rnd(0,1280)/32)
        stoney(i)=Int(Rnd(0,1024)/32)
        EndIf

        If i=80 Then finish=1
        Wend
        For i=1 To imax
        If stonex(i)<2 Then stonex(i)=stonex(i)+1
  If stonex(i)>40 Then stonex(i)=stonex(i)-1
  If stoney(i)<0 Then stoney(i)=stoney(i)+1
  If stoney(i)>30 Then stoney(i)=0
        m.Main=New Main
        m\stone=LoadImage("stone.bmp")
        m\x=stonex(i)*32
        m\y=stoney(i)*32
        m\life=10
        Next

Это генерация камней группами. Если кому-нибудь пригодиться, можете пользоваться:)


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

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