아이템을 먹으면 효과가 나면서 투명해지는 것을 구현 해보려한다.

 

 

참고 사이트

https://bluelimn.tistory.com/entry/java-%ED%88%AC%EB%AA%85%EB%8F%84alpha%EC%A1%B0%EC%A0%88

 

java 투명도(alpha)조절

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AlphaImage implements AdjustmentListener { private JFrame frame; private Canvas canvas; private JScrollBar jsp; private..

bluelimn.tistory.com

 

 

젤리 클래스 생성

새로 파일을 만들어서 젤리 클래스를 생성하였다.

 

 

변수 추가

테스트를 위해 젤리 2개를 추가할 것이다.

그리고 AlphaComposite 변수를 추가한다. (투명도 조절을 위한 변수)

 

 

패널에 젤리 생성

패널에 젤리들을 추가한다.

이미지와 시작 좌표 크기, 투명도를 설정한다.

 

 

젤리를 이동, 이미지 변경, 알파값 조절

젤리들을 0.01초마다 왼쪽으로 이동시키고, 범위 안에 들어오면 이미지를 바꾸고 알파값을 조절한다.

 

 

이미지 그리기

알파 값을 그림 그리기 전에 정해주고 그린다.
(그림 하나하나 그릴때마다 알파 값을 지정해줘야하며 한번만 지정해줄 경우 모든 그림이 투명해지는 불상사가 생긴다.)

 

 

결과

원본 페인트컴포넌트이다.

더블 버퍼링을 추가해보자.

 

전역공간에 변수추가

전역공간에 더블버퍼링 관련 변수를 추가하자

 

paintComponent를 변경하자

buffImage라는 도화지에 buffg가 그림을 그리고 완성된 그림을 g가 출력하게 된다.

 

 

현재 연습용으로 만든 것이라 엔터키를 칠 경우 페이드 하도록하였다.

 

컬러 변수를 추가하자

0 0 0 은 검은색을 뜻하고 마지막 0은 투명도를 뜻한다 (0이면 투명, 255면 불투명이다.)

 

엔터키를 누를 시 투명도를 조절하자

backFade의 색깔은 검은색 그대로 하되 i값을 for문으로 돌려서 값을 늘렸다가 다시 줄이도록 한다.

 

페인트컴포넌트에 추가

현재 더블버퍼링을 사용하기 때문에 update에 넣었지만

기본적으로 paintComponent에 넣어도된다.(그럴경우 buffg를  g로 바꾸자)

 

결과

 

들어가기 전에...

아래 페이지를 먼저 보시는게 빠른 이해에 도움이 됩니다.

https://ondolroom.tistory.com/287

 

자바 스윙 이미지 점프 + 낙하 하게 만들기 (프로젝트 대비)

스윙에 이미지를 하나 올리자 낙하가 멈추는 필드가 필요하고 현재 떨어지는 중인지 현재 점프 중인지 확인하는 변수를 생성한다. 그리고 시간을 가져오는 메서드도 하나 만든다. JPanel을 상속받는 클래스를 만..

ondolroom.tistory.com

https://ondolroom.tistory.com/288

 

자바 스윙 더블점프 구현하기 (프로젝트 대비)

들어가기 전에... 아래 페이지를 먼저 읽는 것이 빠른 이해에 도움이 됩니다. https://ondolroom.tistory.com/287 자바 스윙 이미지 점프 + 낙하 하게 만들기 (프로젝트 대비) 스윙에 이미지를 하나 올리자 낙하가..

ondolroom.tistory.com

 

이미지들을 추가하자

전역공간에 추가하자

다운 키를 눌렀을 때 반응 할 downKeyOn을 선언 및 초기화

 

점프시/ 더블점프시/ 더블점프후 떨어질 때/ 누웠을 때

등등의 이미지를 추가 하였다.

 

누웠을 때 이미지 변경

keyPressed에는 down키를 눌렀을 시 동작을 입력한다.

downKeyOn이 true가 되고 

점프 / 낙하 / 누은 이미지가 아닐 때 누은 이미지로 바꾼다.

 

keyReleased에는 down키를 뗐을 시 동작을 입력한다.

downKeyOn이 false가 되고

점프 / 낙하 / 기본이미지가 아닐 때 기본이미지로 바꾼다.

 

점프시 이미지 변경

일반점프인지 더블점프인지 구분하여 이미지를 추가한다.

 

낙하시 이미지 변경

낙하 이미지는 더블점프 후에만 바뀐다.

조건을 걸어서 변경되도록 하자.

 

낙하 종료시 이미지 변경

낙하 반복문이 끝났을 경우 다시 이미지를 변경 해주어야한다.

조건이 복잡해보이지만 크게 어려울 것이 없다.

다운키를 눌렀을시 + not점프 + not낙하 +이미지가 누은 이미지가 아닐 때 - 누은 이미지로 변경

다운키를 떼었을시 + not점프 + not낙하 +이미지가 기본이미지가 아닐 때 - 기본이미지로 변경

 

결과

 

들어가기 전에...

아래 페이지를 먼저 보시는 것이 빠른 이해에 도움이 됩니다.

https://ondolroom.tistory.com/288

 

자바 스윙 더블점프 구현하기 (프로젝트 대비)

들어가기 전에... 아래 페이지를 먼저 읽는 것이 빠른 이해에 도움이 됩니다. https://ondolroom.tistory.com/287 자바 스윙 이미지 점프 + 낙하 하게 만들기 (프로젝트 대비) 스윙에 이미지를 하나 올리자 낙하가..

ondolroom.tistory.com

 

발판 클래스 생성

발판 정보를 담는 Foot클래스를 생성하였다.

이미지, x, y, 넓이, 높이 등을 저장한다.

(@data 등은 lombok을 이용하여 게터 세터 생성자를 만드는 것이다. 모른다면 인터넷 검색.)

 

변수와 메서드 추가

발판 위치를 담는 fieldStr

발판객체를 저장하는 fieldList

캐릭터 아래에 발판이 있는지 확인하는 count

캐릭터 높이에 따른 발판 위치 조정 변수 nowField

 

패널 생성자에 발판 추가

fieldStr의 길이만큼 반복하여

미리 만들어둔 getGround 메서드를 이용해 1일 경우에만 발판을 추가한다.

 

int tempX = i * landimg.getWidth(null); 를 if문안에 넣지 않은 것은 빈칸을 만들기 위해서이다.

 

 

발판 그리기

paintComponent에서 리스트에 추가한 발판들을 모두 그린다.

(temp들은 보기쉽도록 만들어 둔것이고 g.drawImage에 바로 적어도 된다.)

 

 

새로 추가한 쓰레드들

현재 모두 제작한 것이 아니라 한쓰레드에 다 넣으면 정리가 안될 것 같아서 쓰레드를 쪼개서 만들어 놓았다.

(추후 정리예정)

전용 쓰레드들은 패널 클래스 안에 넣는다.

repaint만 전담하는 쓰레드이다.

 

발판을 왼쪽으로 이동시키는 쓰레드이다.

발판이동 반복문 , 캐릭터 아래에 발판이 있는지 확인하는 반복문으로 구성되어 있다.

 

count가 0이면 발판이 없는 상태로

발판이 있지만 캐릭터가 발판 아래에 있다면 발판이 없는 상태로

발판이 있고 캐릭터가 발판 위에 있다면 발판을 지정해준다.

 

낙하 스레드이다.

field로 되어 있던 것들을 nowField로 모두 변경하였다.

 

그리고 낙하량 보정방법도 변경하였다.

 

결과

 

 

ps 점프와 낙하에 이미지 변경 코드를 넣으면 아래와 같이 가능

(주의 : 이미지를 변경하면 이미지의높이가 달라질 수 있기 때문에 사이즈가 같은 이미지를 쓰거나 높이고정이 필요함)

들어가기 전에...

아래 페이지를 먼저 읽는 것이 빠른 이해에 도움이 됩니다.

https://ondolroom.tistory.com/287

 

자바 스윙 이미지 점프 + 낙하 하게 만들기 (프로젝트 대비)

스윙에 이미지를 하나 올리자 낙하가 멈추는 필드가 필요하고 현재 떨어지는 중인지 현재 점프 중인지 확인하는 변수를 생성한다. 그리고 시간을 가져오는 메서드도 하나 만든다. JPanel을 상속��

ondolroom.tistory.com

 

 

더블점프를 위한 준비

점프 횟수를 카운트 하기 위한 변수를 하나 선언 및 초기화 해준다.

 

키 리스너 수정

이전에는 바닥에 닿았을 때만 점프 할 수 있었지만 이제는 공중에서 한번 더 점프해야한다.

더블점프가 2미만일 때만 점프 하도록 설정하자.

 

점프 쓰레드가 가동되면 doubleJump에 1을 추가하고

이번 점프가 몇회째의 점프인지 nowJump에 임시로 저장한다.

 

점프 중일 때 점프가 한번 더 되는 경우 처음 점프를 멈춰준다.
(멈춰주지 않으면 상승 가속이 붙는 것처럼 할 수 있으나 쿠키런에서는 가속이 붙지 않는 것처럼 보이기 때문에 추가함)

그리고 점프가 끝나면 조건에 따라 jump를 false로 변경한다.
(if문이 없다면 스페이스를 따닥 눌러서 더블점프를 할경우 첫번째 점프 스레드의nowJump는 1이고 doubleJump는 2이기 때문에 더블점프 도중 jump가 false로 바뀌어 버린다. 그래서 if문을 추가함)

 

낙하스레드 수정

처음 빨간 박스는 이번 주제와 관련이 없는 내용이지만, imgY에 낙하량을 더해주다보면 낙하량이 더 클 경우가 생긴다.

예를들어 바닥은 250인데 현재 발바닥위치가 240이다. 그때 낙하량이 20이라면 결과적으로 발바닥 위치는 260이 된다.

그러한 점을 보정하기 위한 장치이다.

두번째 박스는 떨어지다가 더블 점프를 할 경우 낙하를 중지하기 위한 조건문이다.

낙하 while문을 빠져나왔을 때 무조건 doubleJump가 0이 된다면 무한점프가 가능해진다.
(바로 위 단락에서 jump가 true면 break하는 조건을 만들었기 때문)

이러한 것을 막기위해 (바닥에 닿았거나 점프 중이 아닐 때) doubleJump를 0으로 바꾸도록 하였다.

 

결과

 

 

 

 

 

 

 

스윙에 이미지를 하나 올리자

낙하가 멈추는 필드가 필요하고

현재 떨어지는 중인지

현재 점프 중인지

확인하는 변수를 생성한다.

그리고 시간을 가져오는 메서드도 하나 만든다.

 

JPanel을 상속받는 클래스를 만들고 이미지를 그린다

 

실행해보면

 

 

패널 생성자 안에 떨어지는 기능을 추가하자

 

패널 생성자 안에 점프기능을 추가하자

 

 

결과

 

쿠키와 젤리가 만나면 젤리가 없어지도록 할 것이다.

 

들어가기 전에...

아래 페이지를 먼저 보시는게 이해에 도움이 됩니다.

https://ondolroom.tistory.com/285

 

자바 스윙(swing) 배경화면이 무한반복 하도록 만들기 (프로젝트 대비)

들어가기 전에... 아래 페이지를 먼저 보시는게 이해에 도움이 됩니다. https://ondolroom.tistory.com/284 자바 스윙(swing) 배경화면이 흐르도록 만들기 (프로젝트 대비) 들어가기 전에... 아래 페이지를 먼저..

ondolroom.tistory.com

 

아이템 클래스 만들기

새로 파일을 하나 만들어서 아이템 클래스를 만들자

아이템 클래스는 이미지와 타입번호, x, y 좌표를 가지고 있다.

 

메인파일로 돌아가자

 

젤리 이미지 그리기

전역공간에 젤리 이미지를 가져온다.

그리고 아이템을 넣을 리스트도 만들어두자.

 

패널의 생성자 안에서 젤리 아이템들을 몇개 추가한다.

 

paintComponent 안에서 for문으로 만든 젤리만큼 이미지를 그리자.

 

 

좌표값 변경과 아이템 제거

좌표값을 변경하는 쓰레드로 이동하자(맵이동 쓰레드)

첫번째 for문은 젤리들의 X좌표를 줄이는 것이고

두번째 for문은 캐릭터 이미지에 젤리의 시작 좌표가 만나면 사라지도록 하는 것이다.

(현재 불완전함.)

 

결과

 

 

 

 

 

 

+ Recent posts