Dat klinkt als een hele beperkte library. Je zou gewoon plaatjes in het geheugen net zo moeten kunnen verwerken als op het scherm, en alleen met de systeemkleuren kunnen werken is echt achterhaald. Misschien is
Simple DirectMedia Layer wat voor je?
Ja, het is allemaal wel een beetje verouderd, maar het is ook een gratische compiler.
Met afbeeldingen in het geheugen kan je niet veel doen, niets eigenlijk. Je krijgt een ID in de vorm van een Cardinal,
die je kan gebruiken om het plaatje ergens op het scherm te tekenen.
Dat kan, je kunt de z-coördinaat nemen van het uitproduct van de muispositie en ieder van de vier zijden van een vakje. Als het punt in het vak ligt, moeten die vier getallen moeten allemaal positief of allemaal negatief zijn (afhankelijk van de oriëntatie van de zijden van je vlakken en je coördinatenstelsel).
Hiervoor is het wel nodig dat de zijden allevier met de klok mee of allevier tegen de klok in zijn gedefinieerd. Bijvoorbeeld als de vier hoekpunten van een vakje ABCD zijn, dan moet A->B->C->D->A een vierkantje vormen (en geen zandloper). Als dat lastig te forceren is kun je ook meerdere volgordes verifiëren, als er één is waarbij het uitproduct voor allevier de zijden hetzelfde teken geeft, dan ligt het punt in het vakje.
Eens kijken of ik het goed begrepen heb, want er gaat iets fout bij de uitvoering
Het resultaat van het kruisproduct geeft me: (x*Ay-y*Ax)
Met x,y: de muispositie
en Ax,Ay: de zijden (verschil van de hoekpunten)
Code: Selecteer alles
PROCEDURE CheckSquare(square,x,y:INTEGER):BOOLEAN;
VAR test,test1,test2,test3:INTEGER;
BEGIN
test:=x*(cubeiso^[square][1][1]-cubeiso^[square][0][1])-y*(cubeiso^[square][1][0]-cubeiso^[square][0][0]);
test1:=x*(cubeiso^[square][2][1]-cubeiso^[square][1][1])-y*(cubeiso^[square][2][0]-cubeiso^[square][1][0]);
test2:=x*(cubeiso^[square][3][1]-cubeiso^[square][2][1])-y*(cubeiso^[square][3][0]-cubeiso^[square][2][0]);
test3:=x*(cubeiso^[square][0][1]-cubeiso^[square][3][1])-y*(cubeiso^[square][0][0]-cubeiso^[square][3][0]);
IF ((test<0) AND (test1<0) AND (test2<0) AND (test3<0)) OR ((test>0) AND (test1>0) AND (test2>0) AND (test3>0)) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END;
END CheckSquare;
waarbij:
x en y de muispositie,
square: het vakje dat getest wordt
cubeiso: array met de coördinaten van de hoekpunten: eerste [] duiden het vakje aan, tweede [] geven het hoekpunt aan (0=linksboven,1=rechtsboven,2=rechtsonder,3=linksonder), derde [] geven de coördinaat aan (0=x,1=y)
Maar waar ik ook klik op het scherm, hij geeft altijd FALSE.
EDIT: Ik zie juist mijn fout denk ik: ik neem het kruisproduct met de richtingsvector van de zijde, wat niet echt kan kloppen.
Maar nu zit ik wel even vast met wat je bedoelt met het kruisproduct tussen een punt en een zijde?