Anonymní profil mikeek – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil mikeek – Programujte.comAnonymní profil mikeek – Programujte.com

 

Příspěvky odeslané z IP adresy 89.103.39.–

Delphi › Plynulý posun
10. 5. 2010   #128676

po přidání

vykres.Handle := GetDC(0);

již chybu nevypisuje.

Ovšem když zkusim jenom třeba na tlačitko dat

vykres.Brush.color:=clblack;

vykres.Ellipse(0,0,30,30);


tak se nic neděje.

1) proč se nic neděje?

2) Sice je pěkny že sem si to za vaši pomoci dokazal takhle vytvořit, ale jak pak dál? :) To při každem pohybu budu překreslovat cely canvas a vykreslovat kuličky na novych pozicich? Nebude to pomaly?

Delphi › Plynulý posun
7. 5. 2010   #128513

no já to zkoušim zatim nanečisto do prazdne aplikace, než to vpustim do te hry, ale i tak, nevim v čem bych tam jinak měl chybu.

 TKula = class

FLeft:integer;
FHeight:integer;
FWidth:integer;
FTop:integer;

function RLeft:integer;
function RHeight:integer;
function RWidth:integer;
function RTop:integer;

procedure WLeft(i:integer);
procedure WHeight(i:integer);
procedure WWidth(i:integer);
procedure WTop(i:integer);

property Left:integer read RLeft write WLeft;
property Height:integer read RHeight write WHeight;
property Width:integer read RWidth write WWidth;
property Top:integer read RTop write WTop;

constructor Create;

end;

var
Form1: TForm1;
Kula: Tkula;
Vykres: TCanvas;
BMap:TBitmap;
han:HDC;

implementation
{$R *.dfm}
constructor TKula.Create;
begin
left:=3;
top:=3;
width:=100;
height:=100;
end;

function TKula.RLeft;
begin
RLeft:=FLeft;
end;

procedure TKula.WLeft(i:integer);
begin
FLeft:=i;
end;

function TKula.RTop;
begin
RTop:=FTop;
end;

procedure TKula.WTop(i:integer);
begin
FTop:=i;
end;

function TKula.RHeight;
begin
RHeight:=FHeight;
end;

procedure TKula.WHeight(i:integer);
begin
FHeight:=i;
end;

function TKula.RWidth;
begin
RWidth:=FWidth;
end;

procedure TKula.WWidth(i:integer);
begin
FWidth:=i;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
kula:=TKula.Create;
Vykres:=TCanvas.Create;
han:=CreateCompatibleDC(vykres.Handle);

Vykres.Brush.Bitmap:=TBitmap.Create;
Vykres.Brush.Bitmap.Width:=form1.Width;
Vykres.Brush.Bitmap.Height:=form1.Height;
SelectObject(han,Vykres.Brush.Bitmap.Handle);
Vykres.Handle:=han;
end;


Při tomto kodu to stále háže "canvas does not allow drawing".. zkoušel jsem před to dat vykres.lock i vykres.trylock, ale nic.

Delphi › Plynulý posun
6. 5. 2010   #128503

To illioner :
fííha, asi sem moc dutej :)...
správně sis vytvořil 1 třídu canvasu(resp. inicializoval) - to teda mam

teď vezmi jeden nějakej pomocnej handle, a do něho přiřaď kompatibilní DC který inicializuješ handlem toho svého globálního canvasu - to jsem pochopil takto (han je pomocný handle):

han:=CreateCompatibleDC(vykres.Handle);
Ovšem u tohoto to vždy skončí s chybou "Canvas does not allow drawing"

Pak teda jestli jsem to dobře pochopil dál:

Pak je důležité vytvořit Kompatibilní Bitmapu zas přes handle svýho canvasu s danym rozlišenim xy. - žeby tak?

Vykres.Brush.Bitmap:=TBitmap.Create;

Vykres.Brush.Bitmap.Width:=form1.Width;
Vykres.Brush.Bitmap.Height:=form1.Height;
Vykres.Brush.Bitmap.Handle:=CreateCompatibleDC(vykres.Handle);

Pomocí selectobject navol na ten pomocnej handle co máš (pořád ten samej) odkaz na vytvořenou bitmapu -

SelectObject(han,Vykres.Brush.Bitmap.Handle);


Do královského glob. canvasu jeho člena handle přiřaď opět pomocný handle. -
Vykres.Handle:=han;


Tak, co dělm špatně? Ještě se omlouvám jestli obtěžuju mou nechápavostí, ale jsem začátečník :)

mikeek
Delphi › Plynulý posun
6. 5. 2010   #128475

Yop ty property byly jenom orientačně, abych věděl zda něco nedělam špatně :).
Dále jsem to mírně nepochytil :).

Takže, vytvořím si jeden globalni canvas.

Vykres:TCanvas


a ve FormCreate

Vykres:=Tcanvas.Create;


A pomocí f-ce CreateCompatibleDC přiřadim handle?

CreateCompatibleDC(Vykres.handle);


Asi ne že? Jelikož u tohoto kroku mi to vždy spadne a vyhodi hlašku "Canvas does not allow drawing"

mikeek
Delphi › Plynulý posun
5. 5. 2010   #128447

mam dotaz. mam tenhle kod:

 TKula = class

Canvas:TCanvas;

FLeft:integer;
FHeight:integer;
FWidth:integer;
FTop:integer;

function RLeft:integer;
function RHeight:integer;
function RWidth:integer;
function RTop:integer;

procedure WLeft(i:integer);
procedure WHeight(i:integer);
procedure WWidth(i:integer);
procedure WTop(i:integer);

property Left:integer read RLeft write WLeft;
property Height:integer read RHeight write WHeight;
property Width:integer read RWidth write WWidth;
property Top:integer read RTop write WTop;

end;

var
Form1: TForm1;
Kula: Tkula;

implementation
{$R *.dfm}
function TKula.RLeft;
begin
RLeft:=FLeft;
end;

procedure TKula.WLeft(i:integer);
begin
FLeft:=i;
end;

function TKula.RTop;
begin
RTop:=FTop;
end;

procedure TKula.WTop(i:integer);
begin
FTop:=i;
end;

function TKula.RHeight;
begin
RHeight:=FHeight;
end;

procedure TKula.WHeight(i:integer);
begin
FHeight:=i;
end;

function TKula.RWidth;
begin
RWidth:=FWidth;
end;

procedure TKula.WWidth(i:integer);
begin
FWidth:=i;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
kula:=TKula.Create;
kula.Canvas:=Tcanvas.Create;


kula.Left:=3;
kula.Top:=3;
kula.Height:=3;
kula.Width:=3;
kula.Color:=clblack;
kula.Canvas.Brush.Color:=clblack;
kula.Canvas.Ellipse((0,0,kula.Width,kula.height);


a vypisuje to chybu "canvas does not allow drawing"

Co dělám špatně? Vlastnosti left, top, width a height - jsou potřeba ještě nějak specialně propojovat s aplikací (resp. s formulářem), aby se brali jako klasicke vlastnosti (odsazeni zleva, zvrchu, šířka, výška)?

mikeek
Delphi › Plynulý posun
2. 5. 2010   #128220

přes Application.OnIdle jsem to zkoušel, dal jsem na ni pohyb nepřatelskych kuliček, ale ten byl trhaný v závislosti na pohybu mé kuličky.... jak přesně máš na mysli definování vlastnich objektů?

mikeek
Delphi › Plynulý posun
29. 4. 2010   #128029

tak sem to udělal teda tak, že jsem si na vše vytvořil misto shapu image a do nich jsem to přes canvas nakreslil (nevim jak bych přesně dělal ten pohyb, kdybych to canvasem kreslil přimo na form...). Pohybuje se to o něco plynulejc, ale furt to neni ono, ale to už bude problem v procedurach kontrolujicich, jestli je kulička na plošince (pokud neni, má padat dolu).
Dá se ta kontrola udělat nějak jinak? Mám tam poc-1 plošinek (plocinka poc je podlaha), nepritel jsou ty dalsi kulicky, ikdyz necham na timeru jenom tohle, furt se me zda ze to jede celkem pomalu, cca od intervalu 40 dolu se nezrychlují, to uz rychleji nedokaze? max je maximalni hodnota kam muze kazda kulicka jet (plosina[k].left+plosina[k].width) a min=plosina[k].left:

for k:=0 to (poc-1) do

begin
if nepritel[k].left=min[k] then pos[k]:=1
else if nepritel[k].left=max[k] then pos[k]:=-1;
nepritel[k].Left:=nepritel[k].Left+pos[k];
end;



Nejvic to asi zatežuje to, když kontroluju jestli ma kulička je na nějake plošince. Projiždim všechny plošinky, zjistim jestli plosinka[k].top=(kulicka.top+kulicka.height) a pak ještě jestli kulicka.left>plosinka[k].left and kulicka.left+kulicka.width<plosinka[k].left+plosinka[k].width a podle toho zjistim jestli je na nektere plošince, jestli neni, tak pada dolu. Nedalo by se nějak lip zjistit, jeslti je na nějake plošince?

mikeek
Delphi › Plynulý posun
29. 4. 2010   #128011

yop dam to teda do jednoho timeru, je to fakt, nevim proč sem to tak nedal rovnou.... no do canvasu jsem to nekreslil proto, že to pořadně neumim (jsem začátečník), tak pořádně nevim jak na to, ale projdu nějaky kurzy a přijdu canvasu na kloub ;). diky

mikeek
Delphi › Plynulý posun
28. 4. 2010   #127953

Zdravím, řešim jeden problem.
Chtěl jsem udělat jednu takovou blbost, prostě kulička (Shape) která by reagovala na zmáčknutí šipek, pohybovala by se, skákala by po takovych plošinkách (pole shapů). Udělal jsem to přes timer (interval 10, vždy zjišťoval GetKeyState(vk_left), vk_right a vk_up ...), vše jsem měl, běhalo to v pohodě, fungovalo jak mělo.
Ale logicky, taková "hra" je o ničem, tak jsem se rozhodl, že přidám na každou plošinku (je jich 11+podlaha) kromě podlahy jednu kuličku(pole shapů) která se bude pohybovat po te plošince od jedné hrany k druhé, při dotyku s mou bude konec hry. Když jsem měl hotov pohyb kuliček (přes další timer, interval 10, pouze posunoval kuličky) a chtěl jsem se pustit do kontroly kolize, otestoval jsem to a co nevidím, hra se při pohybu mou kuličkou dost zpomaluje.
Napadlo mne, že ten prvni timer to asi hodně vytěžuje, chtělo by to pořešit jinak. Chtěl jsem to tedy dát na OnKeyDown formuláře.
Narazil jsem ale na problem, kvuli kteremu jsem to již na začátku dal na timer.

Při zmáčknutí a držení klávesy se sice kulička pohybuje, ale ne ideálně. Vite jak třeba prijíždíte textem a držíte klávesu? Kurzor se posune o jednu pozici, pak má chvíli pauzu a až po té pauze se začne svižně pohybovat dál. Stejně se hýbe i má kulička. Jak se zbavím té pomlky?

kolotoc
C / C++ › Ostré závorky
2. 12. 2009   #120510

omlouvam se, už sem měl čas tak sem si to našel. sorry za obtěžování kvuli takove kravině ;)

kolotoc
C / C++ › Ostré závorky
2. 12. 2009   #120507

šmarja ja vim jak je napsat jinak, přes tu angl. klavesnici třeba, ale de mi o to že je rychlejší tohle, jeslti se to tu řešilo, omlouvám se, ale nijak sem neměl čas to tu projiždět a na vyraz "ostré závorky" se nic nenašlo :)

kolotoc
C / C++ › Ostré závorky
2. 12. 2009   #120492

Zdravim, mam problem s Dev-C++
Nejdou mi v něm psát ostré závorky pomoci p.alt + , a p.alt + .
dá se to nějak opravit? Předem děkuji :)

 

 

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