On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Сообщение: 4
Зарегистрирован: 24.09.08
Репутация: 0
ссылка на сообщение  Отправлено: 09.11.08 12:39. Заголовок: Пазлы


Здраствуйте. Разрабатываю мини игру пазлы. Есть картинка порезаная на пазлы 30 шт. В редакторе сцены сделал
30 Entity у каждого имя состоит из "pN" где N число. Склал их в картинку и сделал неактивными. При инициализации сцены програмно создаю еще 30 Entity с картинками пазлов, формат имени следующий "ppN", на каждый елемент пазла "ppN"вешаеться скрипт, в котором реализован drag&drop и скрипт проверки:
global IsLeftDown;


on "LeftClick"
{
IsLeftDown = true;
var x0=Game.MouseX-this.X;
var y0=Game.MouseY-this.Y;
while(IsLeftDown==true)
{
this.X = Game.MouseX-x0;
this.Y = Game.MouseY-y0;
Sleep(20);
}
}

on "LeftRelease"
{
IsLeftDown = false;
set_puzzle(this.X,this.Y,this.Name);
}

function set_puzzle(x,y,name)
{
var tx1,tx2,ty1,ty2,tname,px1,px2,py1,py2,pname;
tname=name;
pname="Null";
tx1=x+20;
tx2=x+75;
ty1=y+50;
ty2=y+65;
for (var i=1;i<=30;i=i+1)
{
var tmp=Scene.GetNode("p"+i);
px1=tmp.X;
px2=tmp.X+75;
py1=tmp.Y;
py2=tmp.Y+65;
var str=new String(tname);
var ttname=str.Substr(1);
if ((tx1>=px1)&&(ty1>=py1)&&(ttname==tmp.Name))
{
pname=tmp.Name;
Game.Msg(ttname);
}
}

if (pname!="Null")
{
tmp=Scene.GetNode(pname);
tmp.Active=true;
Game.DeleteEntity(tname);
pname="Null";
}

}
Задумовалось как проверить все неактивные пазлы и если найдеться пазл у которого в "гарячей" зоне лежат координаты активного пазла, отключит активный и включить активный.
Горячая зона центральный квадратик в пазле. размером 60на50
Но пока что не сумел довести до ума. Большая просьба помочь реализовать скрипт пазла.

Спасибо: 1 
ПрофильЦитата Ответить
Ответов - 3 [только новые]





Сообщение: 5
Зарегистрирован: 24.09.08
Репутация: 0
ссылка на сообщение  Отправлено: 09.11.08 17:23. Заголовок: Хе хе, чуток работы ..


Хе хе, чуток работы и все готово. Ух мне везет не успивают народные умельцы отписаться сам нахожу выход.
Выкладываю скрипт пазла).
Сначала режим картинку на н частей.
Далее в сцене слажуем из этих частей картинку. отключаем видимость кусочков пазла.
scene_init.script
#include "scripts\base.inc"
global needpazle=30;//количество пазлов.

actor.Active = false;

global IsLeftDown = false;

global pazlayer=Scene.AddLayer("paz");//слой для пазлов.

for (var i=1;i<=30;i=i+1)
{
pazlayer.AddEntity("pp"+i);
var tmp=pazlayer.GetNode("pp"+i);
tmp.AttachScript("scenes\puzzle\scr\puzzle_core.script");
tmp.SetSprite("scenes\puzzle\p"+i+".png");
var r=Random(1,4);

switch (r)
{
case 1:
tmp.X=200;
tmp.Y=Random(10,580);
break;

case 2:
tmp.X=Random(200,810);
tmp.Y=10;
break;

case 3:
tmp.X=Random(200,810);
tmp.Y=645;
break;

case 4:
tmp.X=810;
tmp.Y=Random(10,580);
break;
}

}


puzzle_core.script
global IsLeftDown;
global pazlayer;
global needpazle;

on "LeftClick"
{
IsLeftDown = true;
var x0=Game.MouseX-this.X;
var y0=Game.MouseY-this.Y;
while(IsLeftDown==true)
{
this.X = Game.MouseX-x0;
this.Y = Game.MouseY-y0;
Sleep(20);
}
}

on "LeftRelease"
{
IsLeftDown = false;
this.X=this.X;
this.Y=this.Y;
set_puzzle(this.X,this.Y,this.Name);
}

function set_puzzle(x,y,name)
{
var tx1,ty1,tname,px1,px2,py1,py2,pname;
tname=name;
pname="Null";
tx1=x;
ty1=y;
for (var i=1;i<=30;i=i+1)
{
var tmp=Scene.GetNode("p"+i);
px1=tmp.X-20;
px2=tmp.X+70;
py1=tmp.Y-20;
py2=tmp.Y+75;
var str=new String(tname);
var ttname=str.Substr(1);
if ((tx1>px1)&&(tx1<px2)&&(ty1>py1)&&(ty1<py2)&&(ttname==tmp.Name))
{
pname=tmp.Name;
}
}

if (pname!="Null")
{
tmp=Scene.GetNode(pname);
tmp.Active=true;
pname="Null";
needpazle=needpazle-1;
Game.Msg(needpazle);
if (needpazle==0)
{
this.Active=false;
var LevelMenu = Game.LoadWindow("interface\level_complete.window");
LevelMenu.Center();
LevelMenu.GoExclusive();
Game.UnloadObject(LevelMenu);
}
pazlayer.DeleteNode(this);
}

}

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Сообщение: 118
Зарегистрирован: 10.07.07
Откуда: Россия, Новосибирск
Репутация: 0
ссылка на сообщение  Отправлено: 09.11.08 17:24. Заголовок: :sm36: ..




Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 1
Зарегистрирован: 27.01.09
Репутация: 0
ссылка на сообщение  Отправлено: 27.01.09 23:55. Заголовок: Доброго времени суто..


Доброго времени суток, уважаемые!
Сами мы не местные Пока что учусь разбираться с этим движком, так что не судите строго.
Буду благодарен, если поможете в моей беде.

Решил попробовать вставить сей скрипт.
Поделил картинку на 30 равных кусочков, создал на слое main 30 entity и расставил как положено для цельной картинки. Сделал эти entity невидимыми.

Далее вставил этот скрипт.

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

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 141
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет