Einzelnen Beitrag anzeigen

chrys

Registriert seit: 21. Jan 2003
Ort: Italien
34 Beiträge
 
Delphi 6 Personal
 
#1

DXDraw und die koordinaten.

  Alt 21. Jan 2003, 21:45
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.
  Mit Zitat antworten Zitat