Pozice myši v Allegru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pozice myši v Allegru – C / C++ – Fórum – Programujte.comPozice myši v Allegru – C / C++ – Fórum – Programujte.com

 

p
~ Anonymní uživatel
212 příspěvků
25. 10. 2008   #1
-
0
-

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

Nahlásit jako SPAM
IP: 85.207.38.–
o-lox0
Super člen
26. 10. 2008   #2
-
0
-

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..

Nahlásit jako SPAM
IP: 85.71.152.–
p
~ Anonymní uživatel
212 příspěvků
26. 10. 2008   #3
-
0
-

naprosto tápu :(

int x = mouse_x;

int y = mouse_y;
int a,b;
...
int zmackl = (mouse_b & 1);

if(zmackl=0)
{
if(zmackl=mouse_b & 1)
{
a=x;
b=y;
}
}
else
{
line(screen, a, b, x, y, makecol(0,0,0));
zmackl=0;
}

p

Nahlásit jako SPAM
IP: 85.207.38.–
o-lox0
Super člen
26. 10. 2008   #4
-
0
-

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

Nahlásit jako SPAM
IP: 85.71.152.–
p
~ Anonymní uživatel
212 příspěvků
26. 10. 2008   #5
-
0
-

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..

Nahlásit jako SPAM
IP: 85.207.38.–
o-lox0
Super člen
27. 10. 2008   #6
-
0
-

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ší...

Nahlásit jako SPAM
IP: 85.71.152.–
p
~ Anonymní uživatel
212 příspěvků
27. 10. 2008   #7
-
0
-

no, já mám bílé pozadí se světle šedou mřížkou.. Jo, a nemám tam normální šipku, místo toho jsem si udělal kříž z dvou přímek. Myslíš, že by toto mělo něčemu vadit?jo, a díky za rady:)

Nahlásit jako SPAM
IP: 85.207.38.–
o-lox0
Super člen
27. 10. 2008   #8
-
0
-

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...

Nahlásit jako SPAM
IP: 85.71.152.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 94 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý