Avatar
Neaktivní uživatel:

(předem se omlouvám za pravopisné chybi) ahoj,nerad zase otravuju ale potřeboval bych pomoc,určitě znáte Diablo (1 a 2,3.dílu se to netíká(myslím)) a taky určitě výte jak tam probíhá pohyb(kliknete na mapu a postava pohybuje smněrem ke kliknutí(ale ne přímo(pouze ve čtyřech smněrech)) a já bych potřeboval vědět jak by se to dal uďelat pohyb ve jako v již zmíněné hře(já mám zkrátka rád retro a ve své hře bich ocenil takovíto retro-pohyb)

ps.v životě sem nepoužil script,ale rád se to naučím(tak něják tuším že to bude potřeba :D )

Odpovědět 19.2.2015 17:48
Neaktivní uživatelský účet
Avatar
Dominik Hošic
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Dominik Hošic:

Koukni se na nějaký tutoriál ohledně pathfindingu.

Nahoru Odpovědět 20.2.2015 18:00
Klient: Nefunguje mi internet co s tím uděláte? Operátor: a co vidíte na monitoru? Klient: No signal...
Avatar
Neaktivní uživatel:

Ahoj,

Dominik odkazoval na pathfinding, dovoluji si zkonkretizovat:

Nejlepším řešení pro tebe bude A* algoritmus, teorii načteš na wiki, aplikace pro tebe určitě bude hračka :) GM / GMS má vestavěné funkce pro A* algoritmus, nicméně jsou velmi špatně optimalizované, doporučuji využít některé z .dll knihoven , případně pokud ovládáš C/C++ sepsat knihovnu vlastní.

Hodně zdaru :)

Nahoru Odpovědět 20.2.2015 19:32
Neaktivní uživatelský účet
Avatar
chain
Redaktor
Avatar
chain:

Ak som to spravne pochopil tak chces aby sa pohy udial vzdy len na xovej alebo yovej osy. Nemal by byt problem dat do stepu:
If distance_to_po­int(ciel.x,ci­el.y)>0 then {
a=chosse(1,2);
If a=1 then {
If ciel.x<x then x-=1;
If ciel.x>x then x+=1;}
If a=2 then {
If ciel.y>y then y+=1;
If ciel.y<y then y-=1; }
}
Dany algoritmus je skor modelovy, chce to este optimalizaciu rychlosti, skor som to napisal popisne aby bolo jasne ako vyhradit pohyb len do jedneho smeru.

 
Nahoru Odpovědět 21.2.2015 9:25
Avatar
Odpovídá na chain
Neaktivní uživatel:

Ahoj, jen korekce toho co jsi napsal:

if (distance_to_point(target.x,target.y)>2)
{
a=choose(1,2);
switch(a)
 {
 case 1:
  {
  if target.x<x {x-=1;}
  else {x += 1;}
  break;
  }
 case 2:
  {
  if target.y<y {y-=1;}
  else {y += 1;}
  break;
  }
 }
}

Algoritmus jako takový funkční, nicméně iq algoritmu = 0, použij A* tohle je funkční jen za předpokladu,že ve hře nemáš žádné překážky.

pro chain: nedoporučuji u funkce distance_to_po­int(a1,a2,a3) požadovat vzdálenost 0, dělá to nepořádek, protože instance absolutní vzdálenosti k jiné instanci použitím tohoto algoritmu obvykle nedosáhne (za předpokladu, že instance nejsou trvale snapované.)

Hodně zdaru :)

Nahoru Odpovědět  +1 21.2.2015 9:50
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:

to je pro mně trochu složité...nešlo bi to uďelat nějak přes grip(mříšku)...a nebo bi mi sem někdo mohl hodit link s návodem ohleďe pathfindingu(nic čemu bich rozumňel jsem nenašel(našel jsem toho spoustu,ale angličtina mi moc nejde))

Nahoru Odpovědět 25.2.2015 6:51
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:

kašlete na to,už jsem to vyřešil :D (z yoyogames.com jsem si stáhl extenzion který nabízí funkcy adv_move_towar­ds_point(ikona se jmenuje advenced move toward point a jde o předělání klasické funkce s tím rozdílem že je tam o 8 funkcí více,mezi ně patří i simple move(classic,di­agonal,disabled)))

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět 25.2.2015 21:38
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.