2016-08-01 6 views
2

저는 JavaFX에서 Conway의 Game of Life를 간단한 그리드 기반 변형으로 만들고 있습니다. StackExchange에서 찾은 예제를 사용하고 있습니다. 문제는 그 예제에서 스케일링 방법이 나를 위해 작동하지 않는 것입니다. 이 예제에서는 그리드의 "크기"를 선택할 수 있습니다. 즉, 구성되는 행/열의 수를 의미하며, 그 다음에 눈금이 해당 그리드의 각 셀의 크기를 결정하여 그리드가 사용자가 창 크기를 조정하면 캔버스가 표시됩니다.2D 그리드를 캔바스 크기로 스케일하는 방법은 무엇입니까?

(0,0) 및 ((xMax - 1), (yMax - 1))을 사용하여 왼쪽 상단 및 오른쪽 하단 셀을 "채우는"방법으로 테스트했습니다. 하지만 오른쪽 하단의 것은 캔버스 경계 밖으로 벗어나는 것처럼 보입니다. yMax에서 1을 뺀 것이 나타나야합니다. 여기

private double getScaleFactor() { 
     return (canvas.getWidth() + canvas.getHeight())/(cellsWide + cellsHigh); 
} 

이 방법에 문제가 있나요 ... 내가 사용은 "배율 계수"방법? GUI를 구성하는 방법 일 수 있습니까? 캔버스는 BorderPane의 중심에 바인딩되며, 위쪽에 바인딩 된 HBox와 왼쪽에 바인딩 된 VBox가 있습니다. 그러나 저는 평소처럼 (폭/2)와 (높이/2)를 사용하여 캔버스 중심에 물건을 그릴 수 있었으므로 크기 조정 요소를 얻는 방법에 문제가 있습니다.

누군가 나를 도울 수 있습니까?

+0

열과 행의 비율은 항상 동일합니까? 축척 비율은 행 수와 열 수 모두에 적용됩니까? – Aderis

+0

치수가 서로 같아 지도록 치수를 유지하거나 개별 값을 선택할 수있는 옵션이 있습니다. 네, 척도는 두 가지 모두에 적용됩니다. –

답변

2

현재 사용중인 공식이 제대로 작동하지 않는 것처럼 보입니다.

는 다음과 같은 두 가지 사례를 가정하자 :

  1. 당신은 1 행 10 열 100 × 10 캔버스가
  2. 당신은 100 × 20 인 캔버스를 1 행 10 열

첫 번째 경우, 배율 인수는 (100 + 10)/(1 + 10) = 10이고 이상적으로 셀 크기가 조정되어 캔버스를 완전히 채우게됩니다. 그러나 두 번째 경우에는 축척 계수가 (100 + 20)/1 + 10) = 10.909091으로 두 번째 경우의 셀이 첫 번째 경우보다 큽니다. 너비가 변하지 않았고 전체 캔버스가 첫 번째 경우에 사용 되었기 때문에 두 번째 경우의 더 큰 셀이 캔버스에서 벗어나야합니다.

I 스케일 팩터 난 정말 당신이 현재 가지고있는 문제 무엇의 방법으로 너무 많은 도움을 제공 할 수 사용되는 방법에 대해 너무 많이 알고하지 않기 때문에,하지만 :

가정

private double getScaleFactor() 
{ 
    double hfactor = canvas.getHeight()/cellsHigh; 
    double wfactor = canvas.getWidth()/cellsWide; 

    return (hfactor < wfactor ? hfactor : wfactor); 
} 

이것은 높이를 계산한다 : 스케일 팩터가 픽셀 단위 셀의 측면 길이이며, 윈도우는 다른 화면비로 변경할 때 셀이 사각형 남아, 여기에서 작동해야하는 수식이다 셀이 화면의 전체 높이를 채우는 경우 셀의 크기, 셀이 sc의 전체 너비를 채우는 경우 셀의 너비 리드. 그런 다음 모든 셀이 화면에 맞는지 확인하기 위해 최소 크기가 필요합니다.

+0

그 일을 한 것 같습니다! 고맙습니다! –

+0

기본 해상도는 1024x576이며 크기를 조정할 수 있습니다.캔버스가 크기를 변경하지 않는 것처럼 보이고 가로로 창을 축소하면 도구 모음의 단추가 사라지기 때문에 크기 조정 비트를 수정해야하지만 목표는 셀 (눈금)이 세로로 오버 플로우하지 않도록하거나 가로로. 솔루션을 사용하기 전에 수직으로 넘쳤습니다. 커서 크기를 결정하기 위해 행/열 수를 지정하여 캔버스에 맞 춥니 다. –

관련 문제