Dobrý večer,
začínám s Allegrem a vyskytl se mně jeden problém. Chci si napsat jednoduché kreslení přímky. Jak si uložím do proměnných a,b pozici myši hned po stisknutí tlačítka myši, a jak do proměnných c,d pozici myši ve chvíli, kdy tlačítko pustím? Proměnné a,b by byly souřadnice prvního bodu přímky a proměnné c,d by byly souřadnice druhého bodu přímky. Předem díky, s pozdravem p
Fórum › C / C++
Pozice myši v Allegru
Denně v něm nedělám, on je to ale stejně 1x switch.
Udělej zhruba následující-Vyčleň si 1 proměnnou (treba int zmackl).
Nahoď si hlavní vidličku (if,switch), kde testuj zda je 0 nebo 1.
Ve větvi s 0 - čekáš na okamžik stisku tlač. if (zmackl=mouse_b & 1) {....}
a zároveň do a,b uložíš souř. (a=mouse_x;b=mouse_y)
tim se přejde teď do druhý větve:
Ve větvi s 1 - čekáš na přesně opačný stav tlač.
je jasný, že jakmile k tomu dojde kreslíš a resetneš zmackl
install_mouse() tam snad máš.
mouse_b & 1 dává 1 pri stisku levé myši
kdyžtak sem hoď kód kdybys naprosto tápal..
oj oj oj
připadám si jak lektor :)
ale co to zkusit pochopit - to co píšeš a vůbec céčko :)
dávat do zmackl hodnotu před vyhýbkou - si to představ jako klopný
obvod - přepínač, taky chceš rozvítit a ne bliknout - potřebuješ PAMET.
takhle:
int x,y; int a,b;
int zmackl=0;
while(SDL_PollEvent(&event)) { // mas tu doufam nejaky while blok !!
/*
nebo smycku while na zmacknuti Escape klavesy,proste opakovani...while(!key[KEY_ESC]) {
*/
x = mouse_x;
y = mouse_y;
if(zmackl==0) // zacatecnik jak Brno odkdy testujeme prirazovanim !!
{
if(zmackl=(mouse_b & 1))
{
a=x;
b=y;
}
}
else
{
if ((zmackl=(mouse_b & 1))==0) { // toto if ti chybelo
line(screen, a, b, x, y, makecol(0,0,0));
zmackl=0;
}
}
} // konec while bloku
} // konec main
za 100% radeji nerucim
tak jsem to vyzkoušel a nefunguje :( , jinak já jsem v C++ těžký začátečník, takže se předem omlouvám za stupidní otázky a kiksy v kódu.:), Mimochodem nešlo by to třeba nějak s využitím funkce get_mouse_mickeys?, Našel jsem ji v dokumentaci, něco jsem vyzkoušel, ale pořád nic..
Nepanikařit, mě to funguje, jenom například nekresli černou na černou makecol(255,255,255)
(k tomu předpokládám, že máš show_mouse(screen);)
edit: a až to budeš mít zkus navrhnout něco , kde bude ta přímka vidět při tažení, tak těžký to neni (myslim že využiješ clear_to_color,blit ), ať to je profesionálnější...
Dnes bych to střihl do roviny filosofické :-)) ...
Ano to jsou ty experimenty*, které nejsou podloženy
na řádně sesumírovaném funkčním pozadí, pokud v tom neni nějaký
jiný zoufalý init_bug tak mě napadá, že ty to celé
permanentně promazaváš a přímka neviditelně problikne!
Buďto což doporučuji ji ukládej do POLE struktury
struct
{ int x,y,x2,y2} utvary[111];
do té to uložíš místo řádku kreslení line
a přidáš do cyklu while cykl for s kreslením všech úseček
while(){
for (i=0i++)
line(utvary[i].x,utvary[i].y,...) // nastuduj pole
...
koniny typu zmackl
...
}
(nebo tak troufale nepredbihej)
*předpokládám, že sis otestoval a umíš kreslit přímky,
tozn. odstraň ten vnitřek bloku while {} a před něj dej LINE, jestli je vidět
a nemáš takovýhle zákl. problémy...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Kolize v Allegru — založil Dfire
Pozice scrollovani — založil Míša
Pozice v textu — založil Pavel
Pozice obrazku — založil Daniel
Moderátoři diskuze