hallo
ich arbeite an nem isometrischen tiles engine.
Bis jetzt leuft alles ganz super aber ich bekomme es einfach nciht hin das ich per mausClick die korekten koordinaten bekomme ... deshalb ist bei mir das gefuehl hochgekommen das ich da irgendwas falsch mache oder mir das falsch vorstelle ... hier ein wenig code ..
Code:
procedure TForm5.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
if not DXDraw.CanDraw then exit;
DXInput1.Update;
if not DXDraw.CanDraw then exit;
if isLeft in DXInput1.States then begin
if ( startx > 2550) then begin
startx:=2550;
GlobalX:=GlobalX+scrollspeed;
end
else begin
inc( startx, scrollspeed );
GlobalX:=GlobalX-scrollspeed;
end;
end;
if isRight in DXInput1.States then begin
if ( startx < -3140 ) then begin
startx:=-3140;
GlobalX:=GlobalX-scrollspeed;
end
else begin
dec( startx, scrollspeed );
GlobalX:=GlobalX+scrollspeed;
end;
end;
if isUp in DXInput1.States then begin
if ( starty > 50) then begin
starty:=50;
GlobalY:=GlobalY-scrollspeed;
end
else begin
inc( starty, scrollspeed );
GlobalY:=GlobalY+scrollspeed;
end;
end;
if isDown in DXInput1.States then begin
if ( starty < -3000) then begin
starty:=-3000;
GlobalY:=GlobalY+scrollspeed;
end
else begin
dec( starty, scrollspeed );
GlobalY:=GlobalY-scrollspeed;
end;
end;
somit kann ich den bildschirm bewegen und die mappe scrollen
globalx und gloably waren die variablen in meinem versuch.Sie sollten festhalten wieviel ich gescrollt bin.
Code:
procedure TForm5.DXDrawMouseDown(Sender:TObject;Button : TMouseButton;Shift:TShiftState;X,Y:Integer);
var XClick,YClick:integer;
xlogic,ylogic:integer;
begin
if(button = mbLeft)then begin
if(unitsnotselected)then begin
XClick:=X;
YClick:=Y;
end;
end;
end;
mit der DXMouseDown .... will ich ganz einfach jetzt wissen auf welche koordinate ich geklickt habe ... das problem ist ja es waere keine grosse sache wenn das bild nicht scrollbar waere .
in xclick,yclick halte ich die koordinaten fest wo ich geklickt habe ...diese ist aber relativ zu der DXDraw oberflaechte also nicht zu der logischen koordinate.
ich dachte mir deshalb ich mache eine logische koordinate xlogic,ylogic
wobei :
xlogic:=X+globalx;
ylogic:=-Y+globaly: //habe hier -Y weil die koordiante negativ ist
//jeh weiter ich runter scrolle ... das weis ich weil wenn ich die
//tiles von hand ausrechne wo sie stehen kommen mit meiner metode
//negative nummern raus!
Wenn jemand einen tipp hat wie ich das loesen koennte waere ich dankbar.