dawiddawido Napisano Czerwiec 17, 2007 Zgłoś Share Napisano Czerwiec 17, 2007 Na kółku typu Shape wyliczyłem sobie 12 punktów w równych odległościach. Do jednego takiego punktu, przyjąłem sobie że on będzie reagował na kolor zielony. Kołkiem poruszam się przy pomocy strzałek na klawiaturze. Pixele porównuje tak: KODTColor Color = clRed; if( Form1->Canvas->Pixels[parametry sprawdzanego punktuX][Y] == Color) I tutaj co ma się dziać Mam tylko małe pytanie. Czemu to działa, czyli kula się zatrzymuje tylko jak jade ją przez jakąś figure o właściwym kolorze tylko od dołu do góry i od prawej do lewej, czyli jak zbliżam się do zera a jak oddalam to nie . ------------------------------------- Teraz objaśniam jak to się dzieje żeby nie było nieporozumień: Pixel jest porównywany, tylko w tedy, gdy dana wartość się zmniejsza, czyli w moim przypadku top kuli się zmniejsza, lub left kuli się zmniejsza. W innym przypadku gdy top lub left się zwiększa, to ten pixel w ogóle nie jest porównywany jaki jest kolor, sprawdza warunek i wyznacza flage false. Chyba że ja ten piksel źle porównuje bo ja porównuje piksel na Form1, czyli Form1->Canvas->Pixel[współrzędna X która zmienia się w zależności w którą stronę porusza się kula][i Y zmieniany tak samo jak X] Jeżeli ktoś wie dlaczego, lub co źle robię że pixele są porównywane tylko jak się ich położenie zmniejsza to bardzo proszę o pomoc. Jeśli ktoś może to prosze o szybką odpowiedz. Mam nadzieje że tego za bardzo nie zagmaftałem, i wiecie o co mi chodzi Pozdro. (Mój pierwszy post na tym forum) Link do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Czerwiec 17, 2007 Zgłoś Share Napisano Czerwiec 17, 2007 Za nic nie potrafię zrozumieć o co chodzi. Kolory porównujesz dobrze, a o co w tym wszystkim chodzi to nie wiem. Np co to znaczy "na kółku typu Shape" "przyjąłem sobie że on będzie reagował na kolor zielony" Kto on? Proponuję napisać to jakoś logicznie po polsku. I samemu przeczytać to 10 razy zanim wyśle się na forum. Ubuntu.pl user #10593 Link do komentarza Udostępnij na innych stronach More sharing options...
dawiddawido Napisano Czerwiec 17, 2007 Autor Zgłoś Share Napisano Czerwiec 17, 2007 Sprawa jest prosta Chodzi mi o to że: Kółko typu Shape jest to stCircle taki obiekt Przyjąłem sobie że on będzie reagował na kolor zielony - ten właśnie pixel. Profesor sobie umyślił pewien projekt, który będę realizował, więc mi jest to trochę ciężko wytłumaczyć, ale się postaram. Jak już wcześniej wspominałem, mam obiekt typu shape w kształcie kułka. Jest na nim wyznaczone 12 punktów które są obliczane z wzoru, każdy jest o alfa pozycji dalej. I teraz UWAGA bo będę opowiadał tylko o jednym konkretnym przypadku, o to on, ale wcześniej dodam że każdy pixel ma reagować na inny kolor. Tera o jednym konkretnym pixelu który reaguje na kolor zielony: Gdy koło się porusza (Poruszam się strzałkami) to sprawdzam czy: KODTColor Color = clGreen; s = (magiczny wzór, który jest trochę długi i niechce mi się go przepisywać :) ) if( Form1->Canvas->Pixels[s+X][s+Y] == Color) Timer1->Enable = false; i teraz ma się koło zatrzymać. I zatrzymuje się tylko w 2 konkretnych przypadkach , a powinno się zatrzymywać w 4 przypadkach!!!!! Powinno się zatrzymywać jak: koło porusza się przez element o kolorze zielonym z 1 góry na dól 2 dołu do góry 3 lewo na prawo 4 prawo na lewo. I tu się zaczyna mój problem bo moje kółko reaguje na punkt 2 i 4. Jeśli jeszcze coś jest nie jasne to dla zainteresowanego moge przesłać ten program na maila tylko mi prosze go podać ewentualnie na gg(o ile się da bo tego to nie robiłem nigdy ) Pozdro Link do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Czerwiec 17, 2007 Zgłoś Share Napisano Czerwiec 17, 2007 Ciągle jest to średnio napisane, ale nie czepiam sie już więcej Z tego co napisałeś nie wynika dlaczego program nie działa wg twoich założeń. Najlepiej jeśli dojdziesz do tego sam metodą testowania krok po kroku. Przykładowo możesz zrobić tak: Uwzględniasz tylko 1 przypadek (tak jak napisałeś) Ustalasz sobie ten kolor przykładowo zielony w konkretnej pozycji, którą znasz. Na bieżąco wyświetlasz sobie gdzieś pozycje tego punktu, który przesuwasz i który ma reagować na kolor. Jeśli pozycja punktu leży dokładnie w miejscu wystąpienia koloru to powinno się coś stać (zatrzymanie timera). Program może nie działać z wielu różnych przyczyn, ale nikt tutaj nie zgadnie co jest nie tak. Ja podejrzewam, ze albo coś z tym wzorem, albo przesuwasz się w jednym kroku o więcej niż 1 pixel i czasami po prostu punkt nie trafia, albo kto wie co jeszcze Ubuntu.pl user #10593 Link do komentarza Udostępnij na innych stronach More sharing options...
dawiddawido Napisano Czerwiec 17, 2007 Autor Zgłoś Share Napisano Czerwiec 17, 2007 Ja podejrzewam, ze albo coś z tym wzorem, albo przesuwasz się w jednym kroku o więcej niż 1 pixel i czasami po prostu punkt nie trafia, albo kto wie co jeszcze Wielkie dzięki bo mnie olśniłeś. A znasz jakiś sposób aby liczbe currency lub double zamienić na liczbe integer??? Bo coś mi się wydaje że ja się poruszam o 1.jakiś ułamek. Jak to sprawdzę to dam znać czy pomogło. Zastanawiam się tylko dlaczego jak zmniejszały się wartości to to działało, może akurat trafiało na liczbe całkowitą. Pozdro Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Czerwiec 17, 2007 Zgłoś Share Napisano Czerwiec 17, 2007 round? www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
dawiddawido Napisano Czerwiec 17, 2007 Autor Zgłoś Share Napisano Czerwiec 17, 2007 round? Sorry ale nie wiem o co ci chodzi możesz jaśniej??? Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Czerwiec 17, 2007 Zgłoś Share Napisano Czerwiec 17, 2007 Bleee... to delphi w cepie rzutujesz na inta. to wszystko przez to ze takie nazewnictwo stosujesz PS w cepie jest currency? :| www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
dawiddawido Napisano Czerwiec 19, 2007 Autor Zgłoś Share Napisano Czerwiec 19, 2007 JUż nieaktualne wszystko działa tylko przy sprawdzaniu sobie nie potrzebnie pokolorowałem ramke Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.