본문 바로가기
PLC 전기제어 기술자료/뻘짓 연구소

[MELSEC Q] (뻘짓주의) 스크린에 도트 스프라이트 애니매이션을 구현해보자?

by 위치결정 2022. 1. 23.
반응형

Sprite.gxw
0.88MB
Sprite.prx
0.62MB

 

PLC에서 도트 픽셀의 좌표계 (X, Y) 와 도트애니메이션을 구현합니다.

주요 기능으로는 방향키를 조작하여 도트 픽셀 이미지의 위치를 변경할수 있습니다.

 

참고로 왜 이런 짓을 하느냐? 그건 아무도 몰?루

그냥 재밌으니까요...

[ 좌표계 I/O Map ]

X0, X1 : X좌표계 이동 (+1 / -1)

X2, X3 : Y좌표계 이동 (+1 / -1)

 

Y0 ~ YFF : 미니맵 좌표 표시등

Y100 ~ Y8FD : 메인 베이스화면 좌표 표시등

 

D0 : X좌표

D1 : Y좌표

D2 : 미니맵 X, Y 좌표 연산

D4 : 메인 베이스화면 X, Y 좌표 연산

미니맵, 기본적인 현재 위치를 표현한다. (16 * 16)
메인 베이스화면, 이 화면에서 도트이미지를 표현합니다.. (프로페이스의 한 화면에 표현 할수 있는 오브젝트 한계상 32*32 가 한계일듯...)

 

[ 프로그램 ]

 

#1. X, Y좌표계 구현

X0, X1 스위치를 누르면 D0을 가산, 감산 하여 X좌표를 움직합니다.

X2, X3 스위치를 누르면 D1을 가산, 감산 하여 Y좌표를 움직입니다.

 

이를 미니맵은 16* 16으로 설정하였으니 이를 표현하기 위하여 Column단인 Y좌표는 *16을 하고, X좌표는 더합니다.

그 결과를 D2에 저장합니다.

미니맵 좌표[D2] = (Y좌표[D1] * 16) + X좌표[D0]

 

이 연산된 좌표번호 D2를 이용하여 미니맵의 도트 램프인 Y0 부터 YFF 중 해당위치를 점등합니다.

 

 

#2. 스프라이트 도트 찍기

 

도트는 원하는 움직임에 맞추어 열(Row) 별로 도트를 찍어줍니다. 4*4 픽셀이라 간단하게 그려보았습니다.

좌측부터 0번비트로 다음과 같이 데이터를 미리 써두고 움직이는 조건을 만들어서 불러오면 되겠습니다.

 

#0
D100 = 0110 (0x6)
D101 = 1011 (0xD)
D102 = 1001 (0x9)
D103 = 0110 (0x6)

#1
D110 = 0110 (0x6)
D111 = 1001 (0x9)
D112 = 1011 (0xD)
D113 = 0110 (0x6)

#2
D120 = 0110 (0x6)
D121 = 1001 (0x9)
D122 = 1101 (0xB)
D123 = 0110 (0x6)

#3
D130 = 0110 (0x6)
D131 = 1101 (0xB)
D132 = 1001 (0x9)
D133 = 0110 (0x6)

 

 

 

#3. 좌표에 맞추어 스프라이트 도트 애니매이션 표현

앞서 D100부터 D130까지 도트를 미리 준비해놓은 이미지 4장을 D10에 특정 조건이 충족되면 변경되도록 구성합니다.

 

1열 : D100 -> D110 -> D120 -> D130

2열 : D101 -> D111 -> D121 -> D131

3열 : D102 -> D112 -> D122 -> D132

4열 : D103 -> D113 -> D123 -> D133

 

각 열마다 순차적으로 불러오면 되므로 인덱스를 이용하여 D10에 5초마다 D100부터 D130까지 값을 가져오도록 꾸며서 테스트 해봅니다.

 

#4. 메인 베이스화면에 도트 애니메이션 표현

메인 베이스에 스프라이트를 뿌리는것도 아까 미니맵의 램프를 계산 했던것과 같은 방법으로 계산합니다.

하지만 이번에는 메인베이스는 32*32 로  1열이 32개 비트로 구성되어있으므로 Y좌표에 *32, X는 위에서 했던것과 같이 더합니다.

 

베이스 좌표[D4] = (Y좌표[D1] * 32) + X좌표[D0]

 

그렇게 얻은 좌표[D4]를 이용하여 베이스화면 비트의 1열부터 4열까지 인덱스를 활용하여 4비트 단위로 비트를 표현합니다.

 

 

그런데... 재밌긴 한데 정말로 어디다 써먹죠..?

반응형

댓글