Pereiti prie turinio

collision detection ant PHP/Javascript


Rekomenduojami pranešimai

Sveiki programuotojai,

 

Bekuriant žaidimą susidūriau su rimtu iššukiu - collision detection. Bandau ieškoti internete, bet dar nesėkmingai.

 

Esmė, kad reiktų kažkaip paskaičiuoti kada galima ranged ataka, o kada ne dėl kliūčių. Pateiksiu paveiksliuką, kad lengviau būtų suprasti.

 

http://www.dakija.com/blog/img/cll123.png

 

Taigi, geltoni taškai tai kliūtys, pro kurias neina ranged atakos. Raudonos rodyklės rodo, kad negalima pasiekti targeto esančio už kliūčių. Žalios rodyklės rodo, kad jei targetas būtų ties jomis, būtų galima daryti ranged ataką.

 

Tad ieškau:

 

1a) javascripto frameworko, kuris tokius dalykus sugeba suskaičiuoti

ARBA

1b) idėjos nuo ko pradėti.

 

2) php pusėje apsaugos nuo čytinimo, galbūt kažkoks supaprastintas variantas kada galimos atakos, suvokiu tai kaip tiesiog JS funkcijos perrašymą.

 

p.s. reikia daryti JS ir PHP funkcijas, nes server side nenoriu apkrauti tuo, ką galima daryti user side, o server side pasilikti tik apsaugą nuo sukčiavimo.

 

Any ideas? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveikas,

 

esu gan apsnūdęs, tai gal neišeis visų minčių perteikti, bet aš manau, jog tau padėtų paprastos matricos ir kelio sumų skaičiavimas.

 

Tarkim turime map`ą matricos formatu:

 

http://i.imm.io/1dlbn.png

 

Kuriame visur galima vaikščioti, vienetas žymi leidimą eiti per tą vietą:

 

http://i.imm.io/1dlb8.png

 

Jeigu žmogus pasirenka eiti iš taško A į tašką B, tada:

  1. suskaičiuoji kiek laukelių jis nori paeiti
  2. sudedi jo trajektorijos (kelio) taškų suma
  3. jeigu galima eiti (t.y. visuose laukeliuose yra vienetai), tada jų suma sutiks su laukelių skaičiumi ir tada turėtum leisti paeiti

 

Šiame pvz einama per 3 laukelius ju suma lygi 3 (1+1+1) = leidžiama eiti

 

http://i.imm.io/1dlfE.png

 

 

Šiame pvz einama per 3 laukelius ju suma lygi 2 (1+0+1) = draudžiama eiti

 

http://i.imm.io/1dlgl.png

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Visiškai nepagavai. Prie ko čia forma? 5x5 matrica, skirta žemėlapiui kuris būtų sudarytas iš 5x5 laukelių, kurie žemėlapyje gali būti, kad ir aštuonkampiai, arba skrituliukai, arba kas tik nori, dizainas ne prie ko.

manau jis turėjo omeny, kad žmogus bus klaidinamas išvaizdos.

 

išvaizdos, kuomet nurodoma šešiakampiais, o tikslus ėjimas negalės būti padarytas tam tikroje vietoje. Nebent jo matrica susidarys iš 1x1 pixelio langelių.

Redagavo gio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

manau jis turėjo omeny, kad žmogus bus klaidinamas išvaizdos.

 

išvaizdos, kuomet nurodoma šešiakampiais, o tikslus ėjimas negalės būti padarytas tam tikroje vietoje. Nebent jo matrica susidarys iš 1x1 pixelio langelių.

Po post-update supratau ką norėjai pasakyti :) norint su šešiakampiais dirbti, reikėtų matricoje perrašyti skaičius, viduryje dėti 1, arba 0, o kryptines judėjimo pusės žymėti kitu skaičiumi.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Realiai tau tinka metodas, kurį prieš tai rašė su array, tačiau vėl yra toks dalykas, kad turėsi tuščius tarpus užpildyti arba pasirašyti kokią nors sistemą, kuri generuojant tavo lauką sugeneruotų teisingai ir array :) Pagal paveikslėlį, tai array taip pat turėtų eiti įstrižai, todėl gautus kažkas tokio manau:

$line[] = array(1,1,1,1,1);

$line[] = array(0,1,1,1,1);

ir t.t.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Manau su masyvu nelabai išsiversi, nes jame paprastai gali iteruoti tik aštuoniomis kryptimis – kairėn, viršun, dešinėn, žemyn bei dar keturios kryptys įstrižai. Pas tave vien paveiksliuke nubraižytos 6, o kur dar nepažymėtos...

 

Galėtum pasidaryti koordinačių lauką. Tada paimi dviejų taškų koordinates – iš kurio ir į kurį šauni – bei susidarai tiesės lygtį. Su šia tiesės lygtimi nustatai, ar ji nekerta kokių kliūčių. Kliūtį gali įsivaizduoti kaip apskritimą — jam saugoti reikės koordinatės bei spindulio (kuris bus bendras visiems). Tada su formule

http://upload.wikimedia.org/math/5/a/e/5aea3e408bf7348f5e1720d4b8043fcf.png

http://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line#Cartesian_coordinates

pasiskaičiuoji atstumus tarp tiesės ir kiekvieno taško ir žiūri, ar visi jie didesni už spindulį. Jei ne, reiškia buvo pataikyta į kliūtį.

 

Belieka tik optimizacijos, kad skaičiuotum su kuo mažiau taškų ir praleistum tuos, kurie arba per toli , kad iš vis galėtų kliudyti, arba nėra kliūtys dėl pačio žaidimo mechanikos (galima šauti virš jų).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Greiti jūs čia.. :)

 

 

Mantai, manau, kad skiriasi funkcija kai norima eiti per hexagoną ir kai norima šauti tiesiai iš toli. Nes neatitinka tiesi linija į pvz 2 valandą su hexagonais kai darai ėjimą. Reikia kažkaip kitaip suktis.. :)

 

 

pvz kodėl neišeitų taip padaryti

 

X X X X X

1 X X X X

X X 0 X X

X X X 2 X

 

tiesia linija 1 negalės pataikyti į 2 per kliūtį 0, nors jei bandyti skaičiuoti "ėjimais", tada galima.

 

http://upload.wikimedia.org/math/5/a/e/5aea3e408bf7348f5e1720d4b8043fcf.png

 

dėkui už pasiūlymą, bandysiu daryti ir žiūrėsiu kas gausis :)

Redagavo fshock
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...