Diskuze: čtverečky

C# .NET .NET (C# a Visual Basic) čtverečky American English version English version

Avatar
ratpile
Člen
Avatar
ratpile:

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:

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
rwn
Člen
Avatar
Odpovídá na ratpile
rwn:

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 rwn
ratpile:

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
rwn
Člen
Avatar
Odpovídá na ratpile
rwn:

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ý
Redaktor
Avatar
Odpovídá na ratpile
Jan Vargovský:
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
rwn
Člen
Avatar
Odpovídá na Jan Vargovský
rwn:

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
Redaktor
Avatar
Ziki:

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.