Toon posts:

[Borland c++]Plaatje animatie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Nou, ik heb hem hoor, borland c++ builder 5. (6 draait niet op mijn bak :(, me pa heeft het er niet voor over computer te kopen, de eikel, en ik ben te arm er 1 te kopen).

Maar nou heb ik (alweer) een probleem. Ik heb namelijk een plaatje op het scherm gekregen, zeer simpel in Bcb, en hij beweegt, ook dat is erg simpel in bcb.

Mijn probleem is alleen dat dat plaatje zeer irritant knippert, en dat wil ik natuurlijk niet.

Ik heb dus een TImage genaamd "spongebob". (Geen commentaar ;))
En ik heb een Timer, de interval is 50 bij OnTimer staat spongeomhoog.

code:
1
2
3
4
void __fastcall TForm1::Spongeomhoog(TObject *Sender)
{
spongebob->Top++;
}


Deze zeer makkelijke code levert dus geen mooi resultaat op. Iedere keer al moet het plaatje omhoog, knippert ie 1 maal. Hoe voorkom ik dat?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:18

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 22 januari 2003 @ 17:22:
Nou, ik heb hem hoor, borland c++ builder 5. (6 draait niet op mijn bak :(, me pa heeft het er niet voor over computer te kopen, de eikel, en ik ben te arm er 1 te kopen).
nou nou nou, dan ga je maar werken ofzo. Geef mij een goede reden waarom jou pa dat voor jou zou kopen... (begrijp me niet verkeerd hoor, mijn pa koopt voor mij ook wel eens wat, maar ik ga niet op hem lopen schelden als ie dat niet doet)
Maar nou heb ik (alweer) een probleem. Ik heb namelijk een plaatje op het scherm gekregen, zeer simpel in Bcb, en hij beweegt, ook dat is erg simpel in bcb.

Mijn probleem is alleen dat dat plaatje zeer irritant knippert, en dat wil ik natuurlijk niet.

Ik heb dus een TImage genaamd "spongebob". (Geen commentaar ;))
En ik heb een Timer, de interval is 50 bij OnTimer staat spongeomhoog.

code:
1
2
3
4
void __fastcall TForm1::Spongeomhoog(TObject *Sender)
{
spongebob->Top++;
}


Deze zeer makkelijke code levert dus geen mooi resultaat op. Iedere keer al moet het plaatje omhoog, knippert ie 1 maal. Hoe voorkom ik dat?


hoe bedoel je knipperen? Komt de achtergrondkleur er toevallig steeds doorheen? Nou ken ik de VCL niet echt, maar ik weet wel dat in windows een window wordt gevuld met een background brush alvorens hij wordt getekend. De BeginPaint () functie - die wordt aangeroepen tijdens de afhandeling van een WM_PAINT - stuurt een WM_ERASEBKGND message naar de window. De default implementatie hiervan is om het gedeelte wat geupdate moet worden te fillen met de background brush die bij de window class geregistreerd staat. Een oplossing hiervoor is om die background brush op NULL te zetten, of om WM_ERASEBKGND zelf af te handelen (als in: niets doen)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • AuC
  • Registratie: Januari 2003
  • Laatst online: 10-07 15:00

AuC

Ik heb geen ervaring met borland. Maar wel met DirectX en als ik daar een plaatje laat bewegen maak ik eerst een 'backbuffer'. Dat is zegmaar een virtuele monitor waarop ik alseerst het plaatje teken. Als het plaatje op de backbuffer is getekend 'flip' ik de backbuffer naar het scherm.

Ik denk dat je in BC++ ook wel zo een engine kan maken die het scherm virtueel tekent en het dan pas aan de gebruiker laat zien.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:50

Creepy

Tactical Espionage Splatterer

AuC schreef op 22 januari 2003 @ 17:48:
Ik heb geen ervaring met borland. Maar wel met DirectX en als ik daar een plaatje laat bewegen maak ik eerst een 'backbuffer'. Dat is zegmaar een virtuele monitor waarop ik alseerst het plaatje teken. Als het plaatje op de backbuffer is getekend 'flip' ik de backbuffer naar het scherm.

Ik denk dat je in BC++ ook wel zo een engine kan maken die het scherm virtueel tekent en het dan pas aan de gebruiker laat zien.
form1->doublebuffered = true ;)
(kan zijn dat ik doublebuffered verkeerd heb gespeld).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:18

.oisyn

Moderator Devschuur®

Demotivational Speaker

AuC schreef op 22 January 2003 @ 17:48:
Ik heb geen ervaring met borland. Maar wel met DirectX en als ik daar een plaatje laat bewegen maak ik eerst een 'backbuffer'. Dat is zegmaar een virtuele monitor waarop ik alseerst het plaatje teken. Als het plaatje op de backbuffer is getekend 'flip' ik de backbuffer naar het scherm.

Ik denk dat je in BC++ ook wel zo een engine kan maken die het scherm virtueel tekent en het dan pas aan de gebruiker laat zien.


Een backbuffer is nogal nutteloos als je de frames al klaar hebt staan. Die frames vormen dus eigenlijk je bufferchain

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Creepy schreef op 22 January 2003 @ 17:52:
form1->doublebuffered = true ;)
(kan zijn dat ik doublebuffered verkeerd heb gespeld).
Afgezien van de hoofdletters niet ;)

C++:
1
Form1->DoubleBuffered = true;  // Zo dus


En ja dit is idd de correcte oplossing.

Professionele website nodig?


Verwijderd

Topicstarter
DoubleBuffered werkt perfect!
Dankjewel!

Ik zal niet meer op mijn vader schelden ;) het was ook niet gemeen tegen hem bedoeld.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:50

Creepy

Tactical Espionage Splatterer

curry684 schreef op 22 januari 2003 @ 18:20:
[...]

Afgezien van de hoofdletters niet ;)

C++:
1
Form1->DoubleBuffered = true;  // Zo dus


En ja dit is idd de correcte oplossing.
Tja.. dat krijg je als je eigenlijk Delphi gewend bent :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 23 januari 2003 @ 08:27:
DoubleBuffered werkt perfect!
Dankjewel!

Ik zal niet meer op mijn vader schelden ;) het was ook niet gemeen tegen hem bedoeld.
DoubleBuffered is overigens merkbaar langzamer dan normaal. Dit kun je verzachten door de animatie in een eigen TWinControl derivant zoals TPanel te laten gebeuren waarvan je de DoubleBuffered property zet.

Professionele website nodig?

Pagina: 1