Пятница, 26 Апреля 2024, 13:59

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 30 из 30
  • «
  • 1
  • 2
  • 28
  • 29
  • 30
Форум игроделов » Записи участника » arrow25 [587]
Результаты поиска
arrow25Дата: Пятница, 16 Марта 2012, 22:46 | Сообщение # 581 | Тема: уроки по app game kit
постоянный участник
Сейчас нет на сайте
Quote (ReSeR)
Тоесть вы создаете игры просто в самом движке и не куда их не портируете?

в пробной версии да, даже если вы слепите игру для windows и за хотите её показать другу, ни чего не получится, нужно чтобы у друга программа была тоже
таковы печальные данные об игре.


Сообщение отредактировал arrow25 - Пятница, 16 Марта 2012, 22:49
arrow25Дата: Пятница, 16 Марта 2012, 22:20 | Сообщение # 582 | Тема: уроки по app game kit
постоянный участник
Сейчас нет на сайте
Quote (ReSeR)
Вот он движок моей мечты xD...Это язык более понятен. Спасибо за урок. Подскажите а он полностью платный? на Android я не смогу портировать игру?

к горькому сожалению он платен((, инди версия этого движка стоит 100+ с чем то американской валюты), на андройд экспортировать можно, но только в полной версии(.

Добавлено (16.03.2012, 22:20)
---------------------------------------------
дальнейшие уроки скорей всего будут проходить так:

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

Сообщение отредактировал arrow25 - Пятница, 16 Марта 2012, 22:15
arrow25Дата: Понедельник, 12 Марта 2012, 19:42 | Сообщение # 583 | Тема: уроки по app game kit
постоянный участник
Сейчас нет на сайте
Quote (allxumuk)
Инсталятор где-то на винте лежит, вечером посмотрю.

да уже не стоит если ты по поводу звуков), я уже пережевал эту тему), и добавил его к первому посту.
просто почему то сперва использовал функции для музыки а не для звуков).

Quote (Gavolot)
Убери, а то заминусуют зря. Материться нельзя))

убрал) smile


Сообщение отредактировал arrow25 - Понедельник, 12 Марта 2012, 19:48
arrow25Дата: Воскресенье, 11 Марта 2012, 00:31 | Сообщение # 584 | Тема: уроки по app game kit
постоянный участник
Сейчас нет на сайте
да я сам в шоке), сча еще думаю добавить звук и какой то логический конец с алгоритмом который ты мне подсказал
алхимик у тя случаем он не установлен?) а то чето звук не могу воспроизвести,при клике на спрайт, ошибку выдает((
или допилить этот урок), так то отскок от стен можно одной функцией сделать)), ну по старинке думаю лучше будет разобрать код че там ке чему
кто бы с переводом справки помог было бы ваше суперски)())

Добавлено (11.03.2012, 00:31)
---------------------------------------------
нашел интересное видео по физике
http://www.youtube.com/watch?v=I03qn5ROhu0&feature=player_embedded

исходник видео
Code
rem Preben Eriksen, Playing with AGK physics.

SetVirtualResolution ( 800 , 480 )
SetOrientationAllowed ( 1, 1, 1, 1 )

centx = GetDeviceWidth ( ) / 2
centy = GetDeviceHeight ( ) / 2

global myspriteindex = 1
global width,height
width = GetDeviceWidth ( )
height = GetDeviceHeight ( )

dim mysprites[ 1000 ]

global startrecord = 0
global maxrecord = 500
global recordindex = 0
dim recordxy[ (maxrecord + 1) * 2 ] as integer
global tmp as string

rem A Wizard Did It!
for i = 1 to maxrecord
         makesprite()
next

SetPhysicsGravity ( 0, 200 )
//SetPhysicsDebugOn ( )
SetSyncRate( 60, 0 )

playagk()

AddVirtualButton( 1, 50, 120, 100 )
SetVirtualButtonColor( 1, 0, 255, 0 )
SetVirtualButtonText( 1, "Record" )

AddVirtualButton( 3, 50, 240, 100 )
SetVirtualButtonColor( 3, 0, 255, 0 )
SetVirtualButtonText( 3, "Joint" )

AddVirtualButton( 2, 50, 360, 100 )
SetVirtualButtonColor( 2, 0, 255, 0 )
SetVirtualButtonText( 2, "save" )

ang# = 0
joint = 0

do

if ( GetVirtualButtonReleased( 2 ) = 1)
         fileid = OpenToWrite ( "record.txt", 0 )
         for i = 0 to recordindex
           tmp = "a["+Str(i*2+0)+"]="+Str( recordxy[i*2+0] )
           WriteString ( fileid, tmp + ";" )
           tmp = "a["+Str(i*2+1)+"]="+Str( recordxy[i*2+1] )
           WriteString ( fileid, tmp + ";" )
         next
         WriteString ( fileid, " " )
         CloseFile ( fileid )
endif

if ( GetVirtualButtonReleased( 3 ) = 1  )
       if joint = 1
         joint = 0
         SetVirtualButtonColor( 3, 0, 255, 0 )
       else
         joint = 1
         SetVirtualButtonColor( 3, 255, 0, 0 )
       endif
endif
if ( GetVirtualButtonReleased( 1 ) = 1 or startrecord = 1 )

      if GetVirtualButtonReleased( 1 ) = 1 and startrecord = 1
          startrecord = 0
          SetVirtualButtonColor( 1, 0, 255, 0 )
          SetVirtualButtonText( 1, "Record" )
          for i = 1 to maxrecord
          SetSpritePhysicsOn ( mysprites [ i ] , 2 )
          next
      else

          SetVirtualButtonColor( 1, 255, 0, 0 )
          SetVirtualButtonText( 1, "Stop" )
          if startrecord = 0
           recordindex = 1
          endif
          startrecord = 1

       if ( GetPointerState ( ) = 1  )
          oldx# = x#
          oldy# = y#
          x# = GetPointerX ( )
          y# = GetPointerY ( )
          SetSpritePosition (  mysprites [ recordindex ] , x# , y# )
          recordxy[ recordindex * 2 + 0 ] = x#
          recordxy[ recordindex * 2 + 1 ] = y#
          if recordindex > 1
          DeleteJoint( mysprites [ recordindex ] )
          if joint = 1
            CreateWeldJoint( mysprites [ recordindex ], mysprites [ recordindex ], mysprites [ recordindex - 1], x#, y#, 0 )
          endif
          endif
          SetSpritePhysicsOff ( mysprites [ recordindex ] )

          recordindex = recordindex + 1
          if recordindex >= maxrecord
            recordindex = 1
          endif
       endif
      endif

endif

      fps = ScreenFPS ( )
      Print ( fps )
      Sync()
loop

function makesprite()
         mysprites [ myspriteindex ] = createSprite ( 0 )
      setSpriteColor ( mysprites [ myspriteindex ] , random ( 60 , 155 ) , random ( 60 , 155 ) , random ( 60 , 155 ) , 255 )
      setSpriteSize ( mysprites [ myspriteindex ] , 14 , 14 )
      setSpriteAngle ( mysprites [ myspriteindex ] , 0 )
      SetSpritePosition( mysprites [ myspriteindex ], 1000 , 1000 )
      SetSpritePhysicsOn ( mysprites [ myspriteindex ] , 2 )
         myspriteindex = myspriteindex + 1
endfunction

function playagk()
dim a [ maxrecord * 2 ] as integer

// draw agk
spritestart = 0
maxblocks = 953
a[0]=0; a[1]=0; a[2]=260; a[3]=247; a[4]=260; a[5]=247; a[6]=260; a[955]=0;
for l = 0 to 800

for i = 1 to ((maxblocks-1)/2)
      SetSpritePosition (  mysprites [ i+spritestart ] , a[i*2+0] + (sin(i+l)*(800-l)) ,a[i*2+1] + (cos(i+l)*(800-l)) )
      SetSpritePhysicsOff ( mysprites [ i+spritestart ] )
next i
      Sync()
next l

//
for i = 1 to ((maxblocks-1)/2)
      SetSpritePosition (  mysprites [ i+spritestart ] , a[i*2+0] ,a[i*2+1] )
      SetSpritePhysicsOff ( mysprites [ i+spritestart ] )
// Sync()
next
// pause
for i = 0 to 30*1
Sync()
next
//enable physics.
for i = 1 to ((maxblocks-1)/2)
SetSpritePhysicsOn ( mysprites [ i+spritestart ] , 2 )
Sync()
next
// pause
for i = 0 to 30*6
Sync()
next
//
spritestart = 0
// fireworks
maxblocks = 224
a[0]=0; a[1]=0; a[2]=433; a[3]=474; a[4]=433; a[5]=470; a[6]=433; a[225]=50;

for i = 1 to ((maxblocks-1)/2)
      SetSpritePosition (  mysprites [ i ] , a[i*2+0] ,a[i*2+1] )
      SetSpritePhysicsOff ( mysprites [ i ] )
      Sync()
next
//enable physics.
for i = 1 to maxblocks
SetSpritePhysicsOn ( mysprites [ i ] , 2 )
next
for i = 0 to 30*4
Sync()
next

spritestart = 0
maxblocks = 322
a[0]=0; a[1]=0; a[2]=412; a[3]=136; a[4]=410; a[5]=136; a[318]=421; a[319]=166; a[320]=425; a[321]=163; a[322]=388; a[323]=161;

for i = 1 to ((maxblocks-1)/2)
      SetSpritePosition (  mysprites [ i+spritestart ] , a[i*2+0] ,a[i*2+1] )
      SetSpritePhysicsOff ( mysprites [ i+spritestart ] )
      Sync()
next
// pause
for i = 0 to 30*2
Sync()
next
//enable physics.
for i = 1 to maxblocks
SetSpritePhysicsOn ( mysprites [ i+spritestart ] , 2 )
next
// pause
for i = 0 to 30*2
Sync()
next

endfunction


Сообщение отредактировал arrow25 - Четверг, 08 Марта 2012, 10:09
arrow25Дата: Четверг, 08 Марта 2012, 07:20 | Сообщение # 585 | Тема: уроки по app game kit
постоянный участник
Сейчас нет на сайте
спасибо за ответ, по поводу уроков учту), просто это первый урок в моей жизни который я написал, скорей всего я его до оформлю.
по поводу стыдно): мне ни разу не стыдно спросить про это, я даже не стыжусь говорить о том что мое образование всего 8 классов обычной школы.
про google конечно понятно, что лучше спросить у него
но я же спрашиваю именно про игровой процесс), зачем тогда вообще этот форум и сайт есть?

Добавлено (08.03.2012, 07:20)
---------------------------------------------
апну тему, так как до оформил её) smile

Сообщение отредактировал arrow25 - Четверг, 08 Марта 2012, 04:37
arrow25Дата: Воскресенье, 12 Февраля 2012, 14:10 | Сообщение # 586 | Тема: уроки по app game kit
постоянный участник
Сейчас нет на сайте
если кому то они будут надо пишите в этой теме)
будем вместе соображать)

и так начнем), качаем *(у кого не скачено демо версия) запускаем выбираем скачать можно тут
если вы хоть раз юзали бейсико-подобный язык(например pure бейсик)), или вообще знаете что такое программирование то в первом уроке у вас проблем не будет точно

предлагаю просто повторить один из уроков по xna для си шарпа (c#) как вообще загрузить спрайт( изображение) и заставить его двигаться.

для начала создадим новый проект нажатием в меню new projeсt, или на загрузке меню приветствия(без разницы) см. скрин



перед вами появится окно выбора шаблона(его скринить не буду))
выбираем ну...... например agk portait project, честно сказать я сам даже не знаю в чем разница между всеми этими шаблонами, думаю что в платформах и разрешении(кто в курсе скажите))
среда этого движка подготовит нам пару файлов main.ags, и setup.ags.

начнем с разбора setup.agc
исходный код его

в нем хранятся всего три параметра

тут я ваще думаю не нужно комментировать
ну да ладно обсудим)
первый параметр, или переменная titile это то что будет отображаться в заголовке приложения
далее идет параметр, или переменная width это ширина экрана девайса, и height это высота девайса.(стандартный такой телефон современный)))

и параметр fullscreen отвечает за то как наше приложение будет выглядеть(хз зачем это для телефона ведь мы уже указали разрешение экрана))) (знатоки объясните)) вообщем если туда вместо нуля поставить 1 то на компе оно запустится в полно экранном режиме.

все что перед словом rem это комментарии в стиле бейсика)
раз пошла такая пьянка сразу скажу что комментарии можно писать и другими способами
например:
всем языкам известный си подобный его еще называют


тут сперва идет коммент а потом не понятная функция), и цикл с заколебавшим всех начинающих программистов словом))
че эта функция делает я толком объяснить не могу(так как сам плохо понял), ну попробуйте сами поменять значение дробной например на 22 , и запустите проект она вам покажет не полную часть этих двух слов, думаю зачем она нужна понятно?) если нет идем в справку переводим читаем)

ну... глубоко вдохнув начнем писать нашу первую игру) по мотивам одноименного рассказа про xna только не много по круче)

для начала не чего менять не будем и загрузим спрайт и отобразим его на экране с настройками которые подготовила нам agk, за одно и поймем нафига та функция в самом начале).

сохраним проект (по умолчанию он хранится там где мы его создали в самом начале) (сорри об этом я не писал посчитал это не нужной процедурой) )

берем любой спрайт я возьму этот
и кидаем его в папку media среда сделала её за вас, если это не так то создаем в ручную эту папку где лежит наша игра, то есть где главный файл main



пишем функцию которая грузит спрайты
Code
Ball1 = LoadImage("ball1.png")


сразу хочу сказать что тут нет такого строго типа как например в шарпе), тут можно писать встроенные функции как вам захочется, тоесть можно было написать эту функцию например так
Code
//LoAdImAgE("ball1.png")

обратите внимание на то как мы загрузили спрайт, в переменной ball сейчас хранится id этого спрайта, давайте посмотрим на него)

пишем:
Code
print (ball1)


для тех кто пока не понимает весь код)
Code
rem
rem AGK Application
rem

rem Portrait App
SetDisplayAspect( 0.66 )
loadimage("ball1.png")
rem A Wizard Did It!
do
                             Print("hello world")
                             print (ball1)
                             Sync()
loop


после слов "hello world " нам показало 10001 должно быть)) wacko это и есть id спрайта.
если загрузить еще один спрайт в другую переменную, и вывести на экран то уже покажет цифру 10002, проверим? cool
пишем сразу после того где грузили первый спрайт.
Code
ball2 = loadimage(ball1.png)

и в главном цикле сразу после функции вывода id первого спрайта пишем:

Code
print (ball2)


для ленивых полный код)
Code
rem
rem AGK Application
rem

rem Portrait App
SetDisplayAspect( 0.66 )
ball1 = loadimage("ball1.png")
ball2 = loadimage ("ball1.png")
rem A Wizard Did It!
do
                       Print("hello world")
                       print (ball1)
                       print (ball2)
                       Sync()
loop

думаю понятно всем стало зачем я привел эти примеры))
если нет то попробую объяснить, нужны они для того чтоб понимать к какому мы спрайту в данный момент обращаемся.

а теперь момент истины))
пробуем нарисовать этот мяч*(хз че там у вас у меня мяч)
сразу после загрузки спрайта пишем
Code
createsprite(ball1)// создаем объект спрайта

в главном цикле пишем

Code

//не забудьте удалить долбанутые слова типо привет мир), и всю нашу писанину с идентификаторами
setspriteposition(ball1,35,35)


как обычно весь код:
Code
rem
rem AGK Application
rem

rem Portrait App
SetDisplayAspect( 0.66 )
ball1 = loadimage("ball1.png")
createsprite(ball1)
rem A Wizard Did It!
do

setspriteposition(ball1,35,35)
                      Sync()
loop

функция setspriteposition(id,x,y) позиционирует спрайт с указанным id в координатах (х , y)
опля спрайт то увидели?)
а теперь пробуйте менять дробную самой первой функции), и вы точно наверное поймете зачем она нужна, поменяйте её так например 0.10), да и так и оставьте норм размер.

продолжим....
теперь удалим функцию SetDisplayAspect( ) и вставим эту) за место неё setvirtualresolution(320,480)
это функция больше подходит для телефонов, по экспериментируйте с ней меняя разрешение.
//на данном этапе нам уже понадобятся переменные для того чтоб знать где ваше наш мяч в данный момент находится)

//пишем до главного цикла
Code

//координаты x,y
x as integer
y as integer

//скорость
ispeedX = 5
ispeedY = 5
CountClick as integer


чего мы сделали?
объявили переменные целого типа, x и y нам известны только при старте программы, но нам нужно чтоб мяч двигался, по этому его координаты мы пока только объявили.
и объявили переменную CountClick она у нас будет отвечать за количество кликов по нашему мячу)
весь код по традиции))
Code
setvirtualresolution(320,480)
ball1 = loadimage("ball1.png")//загрузили спрайт
createsprite(ball1)//создали спрайт

//координаты x,y
x as integer
y as integer

//скорость
ispeedX = 5
ispeedY = 5
CountClick as integer

do

                       Sync()
loop

пора запускать наш мячик)

пишем в главном цикле:

Code

setspriteposition(ball1,x,y)
x = x + ispeedx
y = y + ispeedy

тут мы просто в главном цикле к позиции спрайта добавляем скорость), и мяч постоянно движется, но пока он просто улетает за экран и его не видно потом sad сделаем так чтоб он отскакивал сперва от
нижнего края экрана, пока самым примитивным образом)

тут есть один момент) который нужно знать, всегда если мы загружаем спрайт функцией LoadImage() то начальные координаты спрайта считаются 0,0 то есть самый левый верхний угол
существует еще функция загрузки спрайта которая загружает спрайт, у которого начальные координаты начинаются от центра, это удобно например если нужно вращать его( пример колесо), не помню название функции)), как вспомню пропишу сюда))

и тут началась логика))
Code

if (x < 0 ) then ispeedx = abs(ispeedx)
if (y < 0 ) then ispeedy = abs(ispeedy)
if x > (GetDevicewidth() - getspritewidth(ball1)) then ispeedx =- abs(ispeedx)
if y > (GetDeviceheight() - getspriteheight(ball1)) then ispeedy =- abs(ispeedy)


в этой части мы проверяем не улетел ли наш мяч за экран, то есть если положение мяча меньше 0 то мы просто берем мяч и приводим его координаты к абсолютному числу кому не понятна функция абс прошу сюда

по давней традиции полный код))

Code
setvirtualresolution(320,480)
ball1 = loadimage("ball1.png")//загрузили спрайт
createsprite(ball1)//создали спрайт

//координаты x,y
x as integer
y as integer

//скорость
ispeedX = 5
ispeedY = 5
CountClick as integer

do

setspriteposition(ball1,x,y)
x = x + ispeedx
y = y + ispeedy

//отскок мяча от края экрана
if (x < 0 ) then ispeedx = abs(ispeedx)
if (y < 0 ) then ispeedy = abs(ispeedy)
if x > (GetDevicewidth() - getspritewidth(ball1)) then ispeedx =- abs(ispeedx)
if y > (GetDeviceheight() - getspriteheight(ball1)) then ispeedy =- abs(ispeedy)

                         Sync()
loop


скомпилируйте и за пустите игру) мяч будет отскакивать от стенок, причем мы это сделали довольно примитивным методом)

пару слов о функциях которые использовались в двух проверках) smile

если вы знаете хоть не много англ язык то сами должны понять что это за функции)
для тех у кого с этим проблемосы попробую объяснить,
GetDevicewidth() возвращает ширину экрана
getspritewidth(id) возвращает ширину спрайта, id спрайта параметр функции
ну и похожие две функции соответственно возвращают высоту спрайта, и экрана

то есть проверка по оси х(например) выглядит так:
если наш спрайт по оси х(не забываем у нас спрайт позиционирован так что там стоят координаты переменных х , и y)больше чем ширина экрана - ширина самого спрайта, (это трудно понять для начала но если хорошо по думать то все станет ясно)))), ведь наш спрайт начинается с координат 0,0 smile

настал черед нашей уже наверное забытой переменной) которая отвечает у нас за кол-во кликов)
по нашему мячику, но нам нужна будет еще одна переменная.

назовем её IspID wink кстати первая буква i означает тип переменной, в данном случае это целое число, это совсем не обязательно ставить букву "i" перед каждой переменной я это делаю для удобства, для того чтобы знать какого типа переменная, до главного цикла её объявим сразу за переменной CountClick

Code
if ( GetPointerPressed ( ) = 1 ) then IspID = GetSpriteHit ( GetPointerX ( ), GetPointerY ( ) )


разберем эти функции и вообще че это такое))

функция GetPointerPressed ( ) возвращает 0 если не нажали на экран, или 1 если нажали(true,false ей аналог)
GetPointerX ( ) возвращает координаты по оси х того места на девайсе где ткнули пальцем))), ну и та же функция для оси y
то есть эта проверка на то что:
если нажали на экран то записываем в переменную IspID id спрайта

Code
if  (getspriteimageid(ball1)) = (IspID)
                    CountClick= CountClick+1
                    setspritecolor(ball1,random(1,255),random(1,255),random(1,255),100)
                    IspID=0

endif


тут все еще проще)если id спрайта совпадает с id спрайтом этого же спрайта))))
если они совпадают то меняем цвет функцией setspritecolor(id,цвет,цвет,цвет,прозрачность), в которых прописаны случайные числа от 1 до 255
и обнуляем переменную IspIDдля того чтоб наш мяч не зациклился на рандом цвете))
полный код:
Code

setvirtualresolution(320,480)
               ball1 = loadimage("ball1.png")//загрузили спрайт
createsprite(ball1)//создали спрайт

//координаты x,y
x as integer
y as integer

//скорость
ispeedX = 5
ispeedY = 5
CountClick as integer
IspID as integer

do

setspriteposition(ball1,x,y)
x = x + ispeedx
y = y + ispeedy

//отскок мяча от края экрана
if (x < 0 ) then ispeedx = abs(ispeedx)
if (y < 0 ) then ispeedy = abs(ispeedy)
if x > (GetDevicewidth() - getspritewidth(ball1)) then ispeedx =- abs(ispeedx)
if y > (GetDeviceheight() - getspriteheight(ball1)) then ispeedy =- abs(ispeedy)

//считаем клики
if ( GetPointerPressed ( ) = 1 ) then IspID = GetSpriteHit ( GetPointerX ( ), GetPointerY ( ) )

if  (getspriteimageid(ball1)) = (IspID)
                 CountClick= CountClick+1
                 setspritecolor(ball1,random(1,255),random(1,255),random(1,255),100)
                 IspID=0

endif
//ну и просто выводим количество кликов по спрайту(у нас же есть переменная которая считает наши клики по спрайту)

print ("click")
print(CountClick)
                 Sync()
loop

для загрузки перед игрой можно использовать картинку она должна наызватся так AGKSplash.png не обязательно png но название должно быть таким
для фона нужно иметь картинку совпадающую желательно с размерами экрана, и загружать нужно её самую первую например так
Code
CreateSprite ( LoadImage ( "bg.jpg" ) )

кстати демо версия работает на ура уже второй месяц.), единственный минус это не могу обнову скачать и обновится ваше да и друзья не могут по тестить приложение)

для того чтоб использовать звук например при клике на спрайт, нужно его сперва загрузить
до главного цикла загрузить сам звук, например сразу после объявления всех переменных
Code
fx = Loadsound( "BLIP1.WAV" )


И затем в нужном месте его вставить, например там где мы нажимаем на спрайт
Code
if  (getspriteimageid(ball1)) = (IspID)
     CountClick= CountClick+1
     setspritecolor(ball1,random(1,255),random(1,255),random(1,255),255)
     IspID=0
//добавить эту строку
PlaySound( fx )

с праздником всех женского пола)))


Сообщение отредактировал arrow25 - Четверг, 12 Июля 2012, 05:45
arrow25Дата: Среда, 01 Февраля 2012, 00:33 | Сообщение # 587 | Тема: Движок для создания игр на Android
постоянный участник
Сейчас нет на сайте
App Game Kit не смотрел?, правда он тоже не бесплатный но есть trial версия, по простоте довольно схож с короной, достаточно приличная документация, да и портов в полной версии много.

Сообщение отредактировал arrow25 - Среда, 01 Февраля 2012, 00:33
Форум игроделов » Записи участника » arrow25 [587]
  • Страница 30 из 30
  • «
  • 1
  • 2
  • 28
  • 29
  • 30
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг