|
2D-программирование Вопросы, касающиеся двумерного программирования |
15.01.2012, 19:11
|
#46
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
Выходит, что так.
|
(Offline)
|
|
15.01.2012, 20:01
|
#47
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
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
Опять что-то не так. Камень всё время двигается за мышкой
|
(Offline)
|
|
15.01.2012, 20:18
|
#48
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
А ты уверен, что это происходит здесь? Вряд ли KeyDown(2) все время возвращает истину. Поищи по коду, "закоментируй" подозрительные инструкции и т.д.
|
(Offline)
|
|
15.01.2012, 20:28
|
#49
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Да, это здесь, я только здесь писал. На счёт 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 раз взять и присвоить себе координаты мышки
|
(Offline)
|
|
15.01.2012, 20:42
|
#50
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
Зачем надо, чтобы всегда была истинна? Я просто предполагал причину появления камней.
Необходимо ведь, чтобы камень появился однократно?
А если при создании камня, сделать m\life, например, 100?
А KeyDown надо переделать на KeyHit.
|
(Offline)
|
|
15.01.2012, 21:07
|
#51
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Да, как раз в этом и была проблема. Он то создавался, но сразу рушился т.к. m\life был равен нулю Тогда такой способ, видимо, очень хорош в создании редакторов уровней. И клеточек нету, и сохранять удобно.
|
(Offline)
|
|
15.01.2012, 21:25
|
#52
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Опять проблемы.
Сообщение от Nikich
То есть единственный способ это использовать 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 на объекты.
|
(Offline)
|
|
15.01.2012, 21:48
|
#53
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Опять проблемы.
Сообщение от Nikich
Да, как раз в этом и была проблема. Он то создавался, но сразу рушился т.к. m\life был равен нулю Тогда такой способ, видимо, очень хорош в создании редакторов уровней. И клеточек нету, и сохранять удобно.
|
Напиши подробно что ты хочешь сделать (какую игру).. Для чего камни, что с ними делать. Какой игрок и управление и т.п.
Дай исходник, чтобы попробовать сделать по-своему..
Потом посмотрим на решения (но чтобы не брать готовое, а посмотреть как нужно было делать).
|
(Offline)
|
|
15.01.2012, 22:31
|
#54
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Жанр - tds. Игра будет как Stranded 2, только вид сверху. Но строительство будет ближе к Minecraft'y, то есть квадратиками. Сейчас самое важное добавить в игру инвентарь. Исходники смогу дать только завтра. Ну, а камни для строительства или создания вещей.
|
(Offline)
|
|
15.01.2012, 23:30
|
#55
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Исходник и все файлы.
Последний раз редактировалось Nikich, 05.02.2012 в 22:16.
|
(Offline)
|
|
16.01.2012, 08:57
|
#56
|
ПроЭктировщик
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений (для 25 пользователей)
|
Ответ: Опять проблемы.
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
|
(Offline)
|
|
16.01.2012, 09:16
|
#57
|
ПроЭктировщик
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений (для 25 пользователей)
|
Ответ: Опять проблемы.
Сообщение от LLI.T.A.L.K.E.R.
Так, стоп!
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()
|
(Offline)
|
|
16.01.2012, 09:32
|
#58
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
Про картинку. Как я понял, она вообще одна.
А в таком случае копировать ее в каждый экземпляр, да еще и загружать каждый раз из файла, абсолютно бессмысленно.
Проще для рисования каждого камня обращаться к одной картинке,
в виде глобальной переменной или параметра передаваемого в функцию обновления камней.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.01.2012, 09:42
|
#59
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Опять проблемы.
|
(Offline)
|
|
16.01.2012, 09:46
|
#60
|
ПроЭктировщик
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений (для 25 пользователей)
|
Ответ: Опять проблемы.
Сообщение от Nex
Создаст 11.
Надо так
|
Я просто не стал заморачиватся)))
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:02.
|