Вверх ↑
Этот топик читают: Гость
Ответов: 54
Рейтинг: 1
#1: 2012-04-29 16:04:07 ЛС | профиль | цитата
Добрый день!
Я занялся разработкой игры и столкнулся с такими проблемами:
1) Как реализовать загрузку игрового поля не через компонент GE_GridSpace, а через компонент StrList вместе с использованием GE_GridSpace (чтобы поле хранилось не в файле, а в списке строк).
2) Как заставить спрайты, вызванные таким путём, двигаться?

карма: 1

0
Ответов: 2290
Рейтинг: 678
#2: 2012-04-29 16:37:31 ЛС | профиль | цитата
BogdashkaM, смотрите в схемах на форуме, есть там ответы на ваши вопросы. Или выкладывайте схему, а то разговор будет долгий.
1) GE_SpriteArray
2) GE_SpriteMove
карма: 11

0
Ответов: 54
Рейтинг: 1
#3: 2012-04-29 17:29:36 ЛС | профиль | цитата
sla8a, можеш хотябы пример привести?
А то у меня не получается.
карма: 1

0
Ответов: 2290
Рейтинг: 678
#4: 2012-04-29 18:43:25 ЛС | профиль | цитата
Привел пример: code_27771.txt
карма: 11

0
файлы: 1code_27771.txt [8.4KB] [244]
Ответов: 54
Рейтинг: 1
#5: 2012-04-29 23:34:30 ЛС | профиль | цитата
Всё нормально, но когда закрываеш программу, вылазит ошибка.
карма: 1

0
Ответов: 3889
Рейтинг: 362
#6: 2012-04-29 23:42:49 ЛС | профиль | цитата
Ошибка выскакивает в библиотеке System, можно предположить, что где-то намудрено с указателями или потоками (деструктор срабатывает слишком рано или наоборот - позно, пытаясь удалить то, чего нет).
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#7: 2012-04-29 23:58:52 ЛС | профиль | цитата
Ошибка кроется вот здесь


   FScene.OnSpriteDead.Remove(_OnSpriteDead);

в компоненте hiGE_SpriteArray
------------ Дoбавленo в 23.58:
Решение вопроса -- отправьте hiGE_SpriteArray на передний план, чтобы он уничтожался последним, и ошибка исчезнет
карма: 22

1
Голосовали:sla8a
Гость
Ответов: 17029
Рейтинг: 0
#8: 2012-04-30 00:18:05 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-09 16:41:48
карма: 0

0
Ответов: 2290
Рейтинг: 678
#9: 2012-04-30 22:39:16 ЛС | профиль | цитата
BogdashkaM писал(а):
когда закрываеш программу, вылазит ошибка

А я закрывал кнопкой остановить в HiAsm и не заметил. А что хоть за игру планируешь сделать (если не секрет)?
карма: 11

0
Ответов: 54
Рейтинг: 1
#10: 2012-05-01 13:16:04 ЛС | профиль | цитата
sla8a, Вот ссылка на игру. Правда, хотелось бы еще каких-то врагов добавить, которые движутся горизонтально или вертикально туда-сюда! Поможешь решить? Если что: http://vk.com/bogdan_marchenko Я ВК
Может ещё идей подкинеш!
карма: 1

0
Ответов: 2290
Рейтинг: 678
#11: 2012-05-01 15:27:09 ЛС | профиль | цитата
BogdashkaM, сделать такую игру (по твоей ссылки выше) на GameEngine не сложно.
Вот посмотри схемы которые тебе помогут:
В этой игре посмотри управления мышкой в игре и реакцию на блоки финиша: Загони яблоко! (автор Ravilr)
Тут можешь посмотреть загрузку карты из списка строк: GE_Ball (автор Assasin)
Вот еще не сложный пример игры на GameEngine: Зеркала (автор kamakama)
Эта игра сделана не на GameIngine но по теме: [url= http://forum.hiasm.com/forum.html?q=3&p=192982#p192982]Доведи мышку (автор pc-master)[/url]
Так что начинай делать, будут вопросы задавай.


карма: 11

0
Ответов: 54
Рейтинг: 1
#12: 2012-05-01 20:22:47 ЛС | профиль | цитата
sla8a писал(а):
Тут можешь посмотреть загрузку карты из списка строк

Вот эту игру я видел, но я не смог понять, как оно сделано. Можешь схему дать такого поля (из списка строк)?
------------ Дoбавленo в 20.22:
Сделал загрузку поля из списка строк.
Работало. Но потом что-то сделал не так и выдаёт ошибку.
Вот код:
Add(MainForm,2953706,266,231)
{
link(onCreate,14168479:doNext,[])
}
Add(ChildPanel,4602009,574,329)
{
link(Data1,14168479:Count,[(580,317)(349,317)])
}
BEGIN_SDK
Add(EditMulti,2952372,21,21)
{
WorkCount=1
DataCount=1
link(doWork1,13709024:doCalc,[(105,27)(105,69)])
}
Add(Panel,4200799,35,105)
{
Width=64
Height=32
BorderWidth=0
BevelWidth=0
}
Add(Label,3720240,189,63)
{
Width=64
Height=32
Color=16764066
Font=[MS Sans Serif,22,0,0,1]
Caption="ERR"
AutoSize=1
Alignment=2
link(Text,13709024:Result,[(195,51)(163,51)(163,107)(132,107)])
}
Add(MathParse,13709024,126,63)
{
MathStr="%1 + 1"
link(onResult,3720240:doText,[])
link(X1,2952372:Data1,[(132,42)(27,42)])
}
END_SDK
Add(StrList,10461678,392,168)
{
Strings=#30:111111111111111111111111111111|30:111111111111111111111111111111|30:100111111111111111111111111111|30:100111111111111111111111111111|30:100100000000000000021111111111|30:100000000000000000021111111111|30:100000000000000000021111111111|30:111100000000000000021111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|
}
Add(MT_AddData,13466016,784,245)
{
Count=3
link(onAdd,7847183:doSetCell,[])
link(Data1,3650926:Var1,[(790,233)(769,233)(769,289)(748,289)])
link(Data2,1315983:Index,[(797,233)(755,233)(755,289)(713,289)])
link(Data3,3650926:Var2,[(804,233)(780,233)(780,289)(755,289)])
}
Add(ArrayEnum,1315983,700,245)
{
link(onItem,3650926:doWork1,[])
link(Array,2448220:Var,[(706,233)(552,233)(552,289)(398,289)])
}
Add(MultiElement,3650926,742,245)
{
link(onEvent1,13466016:doAdd,[])
link(Data1,1315983:Item,[(748,233)(727,233)(727,289)(706,289)])
}
BEGIN_SDK
Add(EditMulti,10530993,21,21)
{
EventCount=1
WorkCount=1
DataCount=1
VarCount=2
Width=979
Height=340
link(doWork1,6111976:doEvent1,[(53,27)(53,55)])
link(Var1,6254180:Var2,[(27,234)(216,234)])
link(Var2,5359832:Value,[(34,221)(727,221)])
}
Add(Counter,8126353,196,49)
{
Min=-1
Max=30
Point(doValue)
link(onNext,6777097:doCompare,[])
}
Add(Hub,6111976,84,49)
{
link(onEvent1,8126353:doReset,[(147,55)(147,69)])
link(onEvent2,650195:doEvent1,[(136,62)(136,55)])
}
Add(MathParse,12386400,329,49)
{
MathStr="40 - 1 - %1"
link(onResult,7447359:doCalc,[])
link(X1,1872504:Var3,[(335,37)(230,37)(230,93)])
}
Add(Delete,11527048,672,49)
{
Position=2
link(onDelete,5359832:doValue,[])
link(Str,3412385:Value,[(678,37)(646,37)(646,93)(615,93)])
link(Count,12386400:Result,[(692,37)(440,37)(440,93)(335,93)])
}
Add(GetDataEx,1872504,210,88)
{
Angle=3
link(Data,8126353:Count,[(202,93)])
}
Add(Memory,5359832,721,49)
{
link(onData,14466462:doEvent1,[])
}
Add(MathParse,7447359,441,49)
{
MathStr="%1 + 1"
link(onResult,7861885:doDelete,[])
link(X1,6254180:Var3,[(447,37)(347,37)(347,103)])
}
Add(Hub,650195,175,49)
{
InCount=2
link(onEvent1,8126353:doNext,[])
}
Add(Hub,14466462,770,49)
{
link(onEvent1,10530993:onEvent1,[(793,55)(793,27)])
link(onEvent2,650195:doEvent2,[(789,62)(789,50)(163,50)(163,62)])
}
Add(If_else,6777097,259,49)
{
Type=3
Op2=String(29)
link(onTrue,12386400:doCalc,[])
link(Op1,6254180:Var1,[(265,37)(207,37)(207,103)])
}
Add(GetDataEx,6254180,210,98)
{
link(Data,1872504:Var2,[])
}
Add(Delete,7861885,553,49)
{
link(onDelete,3412385:doValue,[])
link(Str,10530993:Data1,[(559,35)(27,35)])
link(Count,1872504:Var1,[(573,37)(216,37)])
}
Add(Memory,3412385,609,49)
{
link(onData,11527048:doDelete,[])
}
END_SDK
Add(GetIndexData,2448220,392,245)
{
Count=5
link(onIndex,7298225:doEvent1,[])
link(Data1,5767728:Array,[(398,229)(370,229)])
link(Data2,8238044:Array,[(405,229)(454,229)])
link(Data3,1614097:Array,[(412,227)(493,227)])
link(Data4,4252335:Array,[(419,227)(549,227)])
link(Data5,10131627:Array,[(426,225)(594,225)])
}
Add(Counter,14168479,343,245)
{
Min=-1
Max=4
Default=-1
link(onNext,2448220:doIndex,[])
}
Add(Hub,7298225,616,245)
{
OutCount=3
link(onEvent1,1315983:doStop,[(665,251)(665,258)])
link(onEvent2,1315983:doEnum,[(665,258)(665,251)])
link(onEvent3,4602009:doWork1,[(642,265)(642,300)(562,300)(562,335)])
}
Add(StrList,8238044,434,168)
{
Strings=#30:111111111111111111111111111111|30:111111111111111111111111111111|30:100111111111111111111111111111|30:100111111111111111111111111111|30:100111111111111111111111111111|30:100000000000011111111111111111|30:100000000000011111111111111111|30:100111111110011111111111111111|30:100111111110011111111111111111|30:100111111110011111111111111111|30:110000020000111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|
}
Add(StrList,1614097,473,165)
{
Strings=#30:111111111111111111111111111111|30:111111111111111111111111111111|30:100100000111111111111111111111|30:100100100111111111111111111111|30:100100100111111111111111111111|30:100100100111111111111111111111|30:100100100111111111111111111111|30:100100100111111111111111111111|30:100100100111111111111111111111|30:100100100111111111111111111111|30:100000100111111111111111111111|30:100000122111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|
}
Add(StrList,4252335,529,165)
{
Strings=#30:111111111111111111111111111111|30:111111111111111111111111111111|30:101111111111112111111111111111|30:100111111111100111111111111111|30:100011111111000111111111111111|30:100001111110000111111111111111|30:100000111100000111111111111111|30:100000011000000111111111111111|30:100000000000000111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|
}
Add(StrList,10131627,574,161)
{
Strings=#30:111111111111111111111111111111|30:111111111111111111111111111111|30:101111111111111111111111111111|30:101000000000000000000000000001|30:101011111111111111111111111101|30:101010000000000000000000000101|30:101010111111111111111111110101|30:101010122000000000000000010101|30:101010111111111111111111010101|30:101010000000000000000000010101|30:101011111111111111111111110101|30:101000000000000000000000000101|30:101111111111111111111111111101|30:100000000000000000000000000001|30:111111111111111111111111111111|30:111111111111111111111111111111|
}
Add(GE_GridSpace,7847183,889,238)
{
GameScene="Scene"
Sprites="sprite_arr"
SpriteList=['wall'=1,'finish'=2]
Point(doSetCell)
}
Add(StrList,5767728,350,168)
{
Strings=#2:11|
}
Ошибка исчезает, если убрать от перебора массива данные из списка строк.
Как это исправить?
карма: 1

0
Ответов: 3889
Рейтинг: 362
#13: 2012-05-01 20:30:50 ЛС | профиль | цитата
Ошибка при работе с указателями в 146-й строке GE_GridSpaceObject, точнее не скажу, дебаггера нет.
карма: 1

0
Ответов: 2290
Рейтинг: 678
#14: 2012-05-01 22:28:47 ЛС | профиль | цитата
BogdashkaM писал(а):
о потом что-то сделал не так и выдаёт ошибку.

BogdashkaM, элементы из вкладки GameEngine работают как Менеджеры. Ошибку у тебя выдает потому что в свойствах (GameScene, Sprites) элемента GE_GridSpace установлены значения несуществующих менеджеров (в схеме их нет). Да и ты подаешь на точку doSetCell значения X,Y и ID, так твои ID элементу не знакомы (не присвоены эти ID спрайтам в схеме).
А для разбивания строки посимвольно пользуйся Str_Enum.
Вот так:
Add(MainForm,2953706,217,406)
{
Width=332
Height=218
Position=1
link(onCreate,872948:doEnum,[])
}
Add(ArrayEnum,872948,280,420)
{
link(onItem,15459306:doEnum,[])
link(Array,13860956:Array,[])
}
Add(Str_Enum,15459306,322,420)
{
Delimiter=""
link(onEnum,7686799:doOperation,[])
}
Add(MT_AddData,6065866,413,420)
{
Count=3
InputMT=3
link(onAdd,2103351:doValue,[])
link(Data2,872948:Index,[(426,408)(408,408)(408,479)(293,479)])
link(Data3,15459306:Part,[(433,400)(359,400)(359,464)(335,464)])
}
Add(Math,7686799,371,420)
{
OpType=1
Op2=1
ResultType=0
link(onResult,6065866:doAdd,[])
link(Op1,15459306:NumSubStr,[(377,409)(364,409)(364,471)(328,471)])
}
Add(StrList,13860956,266,364)
{
Strings=#30:111111111111111111111111111111|30:111111111111111111111111111111|30:100111111111111111111111111111|30:100111111111111111111111111111|30:100100000000000000021111111111|30:100000000000000000021111111111|30:100000000000000000021111111111|30:111100000000000000021111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|30:111111111111111111111111111111|
}
Add(PaintBox,5552006,616,357)
{
Left=10
Top=15
Width=300
Height=160
Color=-16777196
}
Add(Img_Text,12418690,616,539)
{
Point(X)
Point(Y)
link(Bitmap,5552006:Bitmap,[])
link(Text,2103351:Value3,[(629,460)(650,460)])
link(X,16344306:Result,[])
link(Y,10127371:Result,[(643,520)(678,520)])
}
Add(Math,16344306,630,483)
{
OpType=2
Op2=10
ResultType=0
link(onResult,10127371:doOperation,[])
link(Op1,2103351:Value1,[])
}
Add(Math,10127371,672,483)
{
OpType=2
Op2=10
ResultType=0
link(onResult,12418690:doDraw,[(713,489)(713,590)(604,590)(604,545)])
link(Op1,2103351:Value2,[(678,467)(643,467)])
}
Add(MT_MultiMem,2103351,630,420)
{
Count=3
link(onData,16344306:doOperation,[(744,426)(744,610)(590,610)(590,489)])
}
карма: 11

0
Ответов: 54
Рейтинг: 1
#15: 2012-05-01 22:55:40 ЛС | профиль | цитата
Нашел то самое "что-то".
Перед тем, как записывать в поле новое значение для координат, нужно открыть какой-то файл с уровнем, причём так, чтобы размеры соответствовали размерам поля уровней.
sla8a, можеш дать схему загрузки поля из списка строк без использования GE_GridSpace?
карма: 1

0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)