2012-12-03 4 views
0

캔버스에 새 요소를 그릴 경우 어떻게이 요소의 위치를 ​​저장할 수 있습니까?캔버스에서 요소 위치를 추적하는 방법은 무엇입니까?

Context2d context = canvas.getContext2d(); 
context.setStrokeStyle("black"); 
context.arc(50, 50, 20, 0, Math.PI*2); 
context.stroke(); 

또는 게다가 : 어떻게 모든에서 내가 만든 요소를 ​​추적 할 수 있습니까? 거기에 배치해야 할 일종의 스택이 있습니까? 나중에 참조 할 수 있도록 작성한 원 요소를 어떻게 저장할 수 있습니까?

답변

2

필자가 캔버스를 변경할 때만큼 캔버스에 개체를 저장하지 않는다는 것을 이해합니다. 생성 한 원은 캔버스에 대한 명령 세트로만 존재하며, 원한다면이를 저장하는 객체를 만들어야합니다.

캔버스를 배우고 작은 게임을 만들었을 때 draw(Canvas c) 기능을 가진 개체를 만들었습니다. 함수 내에서 캔버스에 그리는 데 필요한 작업을 수행하고 나중에 불러올 수있는 X, Y 좌표를 유지합니다. 그런 다음

public class SomeDrawableObject implements Drawable { 
    private float X; 
    private float Y; 

    public SomeDrawableObject(float X, float Y) { 
    this.X = X; 
    this.Y = Y; 
    } 

    @Override 
    public void draw(Canvas c) { 
    c.drawCircle(...); 
    //or c.drawWHATEVER(...); 
    } 

    public float getX() { 
    return X; 
    } 
    //etc. 
} 

어떤에서 클래스는 SomeDrawableObject의 컬렉션을 유지하고 캔버스에 넣어 당신이 클래스에 저장 한 어떤 위치/색상/기억 된 모든 것을 알 수있는 캔버스를 수정하는 것입니다. 잠재적으로 수업 등을 확장 할 수 있습니다.

+0

알겠습니다. 그러나 올바른 방향으로 가고 있는지 궁금합니다. 내 목표는 마우스로 그릴 수 있고 나중에 드래그 할 수있는 드로어 블 (타원, 원, 직사각형)을 만드는 것입니다. 그래서 내가 위치를 저장해야합니다. 물론 드래그/드롭은 캔버스에서 볼 수 있어야합니다. obejct가있는 오래된 영역을 항상 다시 칠하고 새로운 영역을 페인트해야합니까? 더 나은 접근법이 없습니까? – membersound

+0

불행히도 제가 아는 것은 아닙니다. 이미 설명한대로 게임 GUI 루프가 작동합니다. 캔버스를 다시 그려서 거기에서 물건을 만드는 것입니다. 나는 당신이 옳은 길을 가고 있다고 말하지만, 아마도 당신이 약속 한 것 이상을 얻었을 것입니다. 도형 목록을 스캔하고 Android'onTouch' 이벤트를 사용하여 드래그를 계산하여 클릭이 객체 영역 내에 있는지 감지 할 수 있습니다 – Grambot

0

드로잉은 일시적입니다. 드로잉을 일단 그리면 없어집니다. 모양 개체를 다른 위치에 저장하십시오. 그런 다음 draw 메서드를 호출하면 해당 셰이프 개체에 대한 참조를 사용하여 해당 매개 변수를 검색합니다.

관련 문제