IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
ratpile
Člen
Avatar
ratpile:14.1.2015 10:53

ahoj, potřeboval bych poradit spíš jen co se týče logiky toho problému

mám dve sady ctverecku, modry, cerveny, 100 a 100

a potřebuju, aby každý ze čtverečku modrých, pokud má ve své blízkosti (x políček všemi směry) čtverček modrý, začne se k němu pomalu přibližovat, dokud nemá pozici totožnou

vše funguje - objekt získá potřebný směr, narotuje se, dá se do pohybu ke čtverečku červené barvy, problém je, že se po startu programu jaksi označí JEDEN červený čtverec a VŠECHNY modré kuličky směřují pouze k němu

kód takto reaguje jak přes vlastnost vnořenou do třídy každého ze čtverečků, tak i přes pokus rozhýbat to všechno přes cizí třídu a čtverečky zavřené v kolekcích a iterace

dokázal by mě někdo naťuknout jak na to? :-))

díky

 
Odpovědět
14.1.2015 10:53
Avatar
ratpile
Člen
Avatar
ratpile:14.1.2015 11:02

omlouvám se, psáno na mobilu - ještě jednou ve zkratce, jedná se o sadu červených a modrých čtverců, modré čtverce se ale vsichni približují k JEDNOMU cervenému, namísto toho, aby každý z nich směřoval k nejblizšímu z červených

 
Nahoru Odpovědět
14.1.2015 11:02
Avatar
rawen
Člen
Avatar
Odpovídá na ratpile
rawen:14.1.2015 11:08

Zní to, jakoby měl špatně vyřešené hledání nejbližšího červeného čtverce, možná sem zkus hodit jak jsi tohle konkrétně řešil. :) Hádám, že se ti všechny pohybují k prvnímu nebo k poslednímu vytvořenému červenému čtverci, což asi bude to, jak ti to teď hádám funguje. :)

Editováno 14.1.2015 11:09
Nahoru Odpovědět
14.1.2015 11:08
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
ratpile
Člen
Avatar
Odpovídá na rawen
ratpile:14.1.2015 11:41

ted nemám po ruce kod, ale je to tak jak říkáš, přes foreach se vytvoří kolekce 100 červených a pravděpodobně k prvnímu z nich směřují všechny modré.. jinak ta detekce funguje, pokud vynechám všechny možný rotace a směrování, přes něco ala (zkráceně a osekaně) :

foreach (item in kolekcem) foreach (item_ in kolekcec)
if (distance(item, item_) < 10
teď kod nějaký rotace a směru
item.position += nejaky_direction + time;
 
Nahoru Odpovědět
14.1.2015 11:41
Avatar
rawen
Člen
Avatar
Odpovídá na ratpile
rawen:14.1.2015 12:38

Z tohodle těžko říct, asi by to chtělo přesnej kód. :) Jako podstata je dobrá, chybu můžeš mít třeba v tom nejaky_direction, jestli to není metoda s parametry obou itemů, žeby ti počítal směr jen k jedné kostce vždy. Takže bych se zaměřil asi na její vnitřek. :)

Nahoru Odpovědět
14.1.2015 12:38
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na ratpile
Jan Vargovský:14.1.2015 16:32
foreach (item in kolekcem) foreach (item_ in kolekcec)
if (distance(item, item_) < 10
teď kod nějaký rotace a směru
item.position += nejaky_direction + time;
item_.position += nejaky_direction + time;
 
Nahoru Odpovědět
14.1.2015 16:32
Avatar
rawen
Člen
Avatar
Odpovídá na Jan Vargovský
rawen:14.1.2015 19:31

V tomhle to nebude, on chce, aby se pohybovaly jen ty jedny - modré - item.
Podle mě to musí být někde v tom výpočtu "nejaky_direction".

Nahoru Odpovědět
14.1.2015 19:31
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Ziki
Tvůrce
Avatar
Ziki:16.1.2015 22:39

z toho kódu vyplývá, že všechny budou putovat k poslednímu čtverečku z kolekce, který má vzdálenost menší jak 10, takže se klidně může stát, že všechny budou putovat ke stejnému. spíš bych volil tuhle variantu

tempCerveny = kolekcec[0]; //čistě jen proto aby nebyl null;
foreach (modry in kolekcem) {
    foreach (cerveny in kolekcec)
        // hledáme jestli je blíž než zatím ten nejbližší
        if (distance(modry, cerveny) < distance(modry, tempCerveny))
            tempCerveny = cerveny;
    // ted nejaky kod kdy posles modry ke ctverci na kterej odkazuje tempCerveny
}
Editováno 16.1.2015 22:42
Nahoru Odpovědět
16.1.2015 22:39
Ve vědění je síla.
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 8 zpráv z 8.