Probleem met posities van bitmap opgeven

Status
Niet open voor verdere reacties.

kevinmrn

Gebruiker
Lid geworden
4 nov 2008
Berichten
49
Ik ben een spelletje aan het schrijven en zit ondertussen weer al even vast met een prob. Ik geef mijn personage een x en y waarde mee om te stappen nu is het zo dat wanneer je de toets 'D' indrukt hij op die plaats een bitmap moet tekenen. Het probleem is dat die bitmap vervolgens ook direct weer van positie veranderen. Hoe valt dit op te lossen?
een stukje code tot verheldering

Code:
void Tick()
{
if((GAME_ENGINE->IsKeyDown('D')) && m_Vooruit == 7) 
{
PositieLinker(x, y);
}
}


Code:
void Walker:: PositieLinker(x, y)
{
		m_ParentPtr->PositieBitmap(m_X + HUMANWIDTH/2, m_Y +  HUMANWIDTH/2);
}

Hier loopt ie ook fout vermoed ik...
 
Laatst bewerkt door een moderator:
>> Het probleem is dat die bitmap vervolgens ook direct weer van positie veranderen.


Wat? Kun je je probleem wat beter uitleggen?
 
Dat kan ik zeker:). Ik werk met een boolean voor het checken of de actie is uitgevoerd en ik heb een array gemaakt van bitmaps. Wanneer de actie (actie1) word uitgevoerd tekent mijn programma de bitmap. Of beter gezegd ArrBitmap[0]. Vervolgens (actie2) wanneer hij ArrBitmap[1] hoort te tekenen, gebruikt hij de bmp van positie[0] op de nieuwe plek (x, y) . Of verwisselt hij de ArrBitmap[0] naar de positie waar de nieuwe[1] moet getekend worden?:confused:
 
Wat ik er van begrijp:
Zodra er een bepaalde toets ingedrukt is, wil je dat er een nieuwe bitmap op een nieuwe locatie getekend wordt. Dit doet jouw programma op dit moment niet, want hij tekent dezelfde bitmap op een nieuwe locatie. Correct?

Als ik gelijk heb: post wat code, ik ben helaas niet helderziend :)
 
Ok hier komt ie dan:


Code:
	void Huis::TekenBitmap(int x, int y)
	{
		m_bTekenCracks = true;

		WaarX = x;
		WaarY = y;

	}

	if((m_bTekenCracks) && X < 5)
	{
		GAME_ENGINE->DrawBitmap(BitmapArr[X], WaarX - 80, WaarY);
X++;
	}

Waarom het niet werkt is me wel duidelijk nu als ik het zo bekijk. Ik zoek een manier waarop ik de array rustig kan uittekenen dus bij elke slag 1 bitmap erbij... Als ik nu de bool false zet in de if statement dan verdwijnt uiteraard de Bitmap bij het loslaten van de toets. Ik heb ook devolgende geprobeerd. (Dit gaf droogweg hetzelfde resultaat.)


Code:
		if(c < 9)
		{
		GAME_ENGINE->DrawBitmap(BitmapArr[X], WaarX - 80, WaarY);

		X++
		}

	void Huis::TekenBitmap(int x, int y)
	{
		c += 1;
		WaarX = x;
		WaarY = y;

	}
Alvast al bedankt voor de aandacht Niek_e:thumb:
 
Laatst bewerkt:
Ik heb je meedere malen gevraagd om het probleem duidelijk uit te leggen, dat is je tot nu toe nog niet gelukt. Nu heb een stukje code gepost, waar niemand een touw aan kan vast knopen:
- wat is GAME_ENGINE?
- wat zijn waarX en waarY
- etc etc
- wat hoort het uberhaubt te doen
- wat doet het niet
- etc

>> uhm... waarom stoppen de responces?

Omdat ik andere dingen te doen heb gehad.
 
Je moet het niet persoonlijk opvatten hoor, het was gewoon een vraag.

WaarX en WaarY is simpelweg de positie waar de bitmap getekend(x- en y pos) hoort te worden.
GAME_ENGINE is de engine het werkt zoals een include file, en het kent de functie DrawBitmap. (ik heb hem niet zelf geschreven ik heb hem gekregen om cpp vlotter te leren)

Ik ga het gewoon nog eens probeeren:D
Ik maak een array van bitmaps wanneer de method TekenBitmap word aangeroepen tekent hij bitmapArr[0] wanneer de method nog eens wordt aangeroepen hoort hij bitmapArr[1] te tekenen op de nieuwe x en y positie.

Wat doet hij als de functie wordt aangeroepen tekent hij de bitmap, als hij nogmaals word aangeroepen tekent hij de volgende in de bitmapArr lijst maar word de vorige bitmap verwijdert etc...

De method TekenBitmap wordt aangeroepen wanneer de key 'D' wordt ingedrukt. De 'if' statement staat in een method die constant heruitgevoerd, een tick.

hopelijk is het nu duidelijker?
 
Jazeker. Wat je nodig hebt is een static variabel, deze verliezen hun waarde niet wanneer er uit de functie gesprongen wordt:

Code:
void Huis::TekenBitmap(int x, int y)
{
    static int c = 0;
    WaarX = x;
    WaarY = y

    teken_iets[x];
    //doe iets 

    c++; // <--- deze was ik vergeten 

    return;
}

Een tip voor je volgende posts: Gebruik hoofdletters en punten (e.d.), dat leest al een stuk makkelijker :thumb:
 
Laatst bewerkt:
Ok ik zal er op letten. :p
Ik ga me opfrissen en zal het daarna eens testen.
Alvast bedankt! :thumb:
 
Het probleem is verholpen :D Het zat hem in de x en y waardes. Daar heb ik een array voor moeten maken.

Toch bedankt voor de advice he niek_e :thumb:

-problem solved-
on to the next one :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan