p5js 10

마치며

부연설명 양이 현재 걷는 방식은 어떻게 보면 현실적이지가 않다 이유는 그냥 양 x좌표에 대한 언덕의 x/y/기울기를 가져오는 것뿐이다 왜 그렇게 해야 하냐면 난 "수학을 잘 모른다" 양이 평지를 걸었다면 그냥 걸음수로 컨트롤하면 된다 왜? 1km로 달리는 러닝머신 위에서 내가 한 시간 동안 1km를 가고 싶다면 내가 2km로 뛰면 된다 하지만 양이 걷는 건 평지 즉 직선이 아니다 그러려면 둘 중 하나의 방법이 있다 양의 x값에 언덕의 좌표를 가져올 터인지 아니면 내가 수학을 겁나 잘해서 그걸 계산해서 걸을 수를 늘려줄 것인지! 진짜 멘붕이었고 다시 한번https://youtu.be/hCHL7sydzn0 이분의 영상을 봤고 이분의 영상을 참고해서 나만의 방법을 만들었다 처음 봤을 때와 막바지에 봤을 때 걱..

언덕위를 걷는양!

언덕 그리기->언덕 움직이기 양 이미지 가져오기->양 프레임 올리기->양 움직이기->양이 곡선 위를 걷기 이렇게 따로따로 해왔다 이제 대망의 하이라이트 양이 우리가 그린 언덕 위를 걷게 만들겠다! 두 가지 방법이 있다 1. 현실처럼 걷게 하는 법 2.x좌표에 따른 y좌표와 기울기를 걷는 법 우리는 2번을 쓸 것이다 이유는 "곡선 위에 일정한 속도로 오브젝트를 움직이게 하는 공식을 모른다"(나는) 과정 1. 클라이언트 접속 시 처음 양위치 계산 2. 베지어 클래스에 어떤 포인트 차례인지 알려주는 함수를 만든다 3. 언덕에 맞게 좌표를 넣어줄 함수를 만든다 4. 그거에 맞게 좌표를 계산해 주는 함수를 만든다 5. 그거를 받아서 양에게 준다 진짜 여기가 헬이었다 비슷하게 만드는 방법은 많지만 오차가 많기에....

언덕을 그리자!(4)

이전 글에서는 한 개의 언덕을 이동시켰다! 그러면 이제 이어 언덕이 나타나게 해 보자! 과정 1.point 클래스 고치기 2.draw 함수 고치기 3.bezier 클래스 고치기 과정이 좀 많아서 이렇게 적겠다 세부과정은 각 Step으로 적어 놓겠다! 1.point 클래스 고치기 stepup 에서 pointsx[0]에 초기값을 할당하게 하고 그다음 pointsx[1], pointsx[0]은 계속 스위치 하면서 화면 뒤에서 부터 언덕이 그려지게 만들기 위해 저렇게 설정해준다! 2.draw 함수 고치기 Step one 2차원 배열 생성! 2차원 배열을 만들어주는 함수를 만들어준다! setup함수에서 pointx/y에게 할당해준다! Step two 초기값 할당! 초기 값으로 설정해준다 이유는 이제 언덕이 뒤에서..

언덕을그리자!(3)

오늘은 그린 언덕을 움직이게 할 것이다 이거는 이전 작업에 비해 어렵지 않다 는 뻥이고 이것도 알고 보면 쉬운 거지 우리 같은 코린이 들 시간 잡아먹기 딱 좋은 작업이다 ㅋㅋㅋㅋ 과정 1.언덕움직이는 메서드 만들기 2. 스위치 메서드 만들기 3. 리턴 받는 함수를 다른 메서드로 따로 만들기 1. 언덕 움직이는 메서드 만들기 -자 일단 움직이는 메서드를 만들어보자! 이름은 무브 시스템이라 하겠다 왜냐면 별/구름도 이 함수를 같이 쓰게 될 것이다 자 이제 결과를 보면 띠용? 움직이지 않는다 난 분명 pointx를 1씩 늘려주고 있는데 이유는 바로 여기 있다 function draw() { background('gray'); pointsx=point.returnx(); pointsy=point.returny(..

언덕을 그리자(2)!

이전까지는 단순한 하나의 베지어로 언덕을 그렸다!이번엔 한 화면에 규칙적인 언덕 여러 개를 만드려 보려 한다!과정1. 포인트(좌표 받아오는 클래스) 수정2.bezier(좌표를 받아서 그리는 클래스) 수정! 1. 포인트 수정! 이전까지는 x, y배열 안에고정점 x, 제어점 x, 고정점 x, 제어점 x고정점 y, 제어점 y, 고정점 y, 제어점 y이렇게 줬지만 이제 제어점은 베지어한테 주고 고정점 x, 고정점 x, 고정점 x, 고정점 x고정점 y, 고정점 y, 고정점 y, 고정점 y으로 만들어 줬다!물론 제어점도 이전처럼 여기다가 넣어줘도 되지만 나는 bezier에서 관리를 했다! 2.bezier수정! 자 이제 this.secondx/y를 만들어서 +/-해줘서 제어점을 준다만들고 싶은 언덕을 대충 생각 해보..

언덕을 그리자(1)!

이제 bezier클래스에 있는 좌표들을 따로 꺼내서 포인트라는 클래스를 만들어서 관리할 것이다 이유는 1. 유지보수 2. 다양한 좌표를 사용하기 위해 bezier클래스는 그리기+양이 걷기 위한 함수를 빼고는 걷어내는 거다! 과정 1. 포인트 클래스 생성 2.x, y좌표 생성하기 3.bezier에게 전달해주기 4.bezier 클래스 재정비 1. 클래스 생성&2. 좌표 생성 자 이렇게 x/y를 리턴해주는 함수를 만든다 지금 봐서는 엥 이 정도로 간단한데? 클래스를 굳이 만든다고 할 수 있지만 나중에 언덕 모양도 더 이쁘게 만들고 언덕 수도 늘어나고 언덕이 움직이기 시작하면 불지옥이 되기 때문에 미리 나눠서 작업을 시작한다! 3.bezier에게 전달 p5.js메인 에와서 클래스를 받을 변수 그리고 받을 배열을..

스프라이트 이미지 움직이기(3)

이제는 기울기를 만들 차례이다! 과정 1. 탄젠트 값 구하기 2.atan2 사용 3.draw 에서 바꿔주기 4.p5js rotate() 사용 5.rotate() 보조 값 주기 1. 탄젠트 구하기 p5js.org/ko/reference/#/p5/bezierTangent reference | p5.js p5js.org 역시 내장되어있는 예제를 보면 곡선 밑으로 서 있는 막대기들을 볼 수 있는데 그게 힌트다! 자 코드를 가져와서! let tx = bezierTangent(85, 10, 90, 15, t); let ty = bezierTangent(20, 10, 90, 80, t); let a = atan2(ty, tx); 요 부분을 사용할 것이다! 아마도 이 부분은 stackoverflow.com/questi..

스프라이트 이미지 움직이기(2)

이전에 우리는 스프라이트 이미지를 "걷는 모션"을 내는 데 성공했다! 그러면 이제 진짜로 걷게 해 보겠다 앞에 해온 일에 비하면 훨씬 쉽다! 과정1.x,y값을 전역변수선언2.x값 늘리거나 줄이기 결과물! 이렇게 수평이동을 하는 양을 볼 수 있다!박수!이제 곡선 위에 올려보겠다! 과정1.곡선 그리기2. 양이 걸을 좌표를 받아오는 함수 만들기3.draw함수 재정비4.sheep함수 재정비 1. 곡선 그리기 drawbezier로 한 개의 곡선을 그려준다! 2. 양이 걸을 좌표를 받아오는 함수를 열어준다! getxy()저 안에 있는 bezierPoint는 자체적으로 제공해주는 함수이다!위키에서 찾아보면! 아마 이게 아닐까 생각된다 왜냐면 내가 프로젝트 막바지에 정말 혼신의 힘을 다 해서 양 움직이는 재 코딩 했는..

스프라이트 이미지 움직이기(1)!

youtu.be/3noMeuufLZY 스프라이트 이미지를 움직이는 데는 두 가지 방법이 있다 1. 예를 들어 프레임이 8개면 an1.jpg~an8.jpg 이렇게 나누는 것! 2. 하나의 파일에 다그려 넣고 그때그때 좌표를 얻어오는 것! 난 개인적으로 어렵게 느껴졌지만 효율적이라고 생각해서 2번째 방법을 선택했다! 코드를 보자! 1. 이미지/좌표 불러오기! -p5js에서 preload를 만들어준다 저기에 이제 뭐 mp3나 이런 거를 불러올 때 쓰는 기능 같다! spritedata= loadJSON('p5/horse/horse.json'); spritesheet = loadImage('p5/sheep.png'); 자바스크립트는 별게 다된다 ㅋㅋ 2. 좌표를 지정해 배열에 하나하나 하나 넣어준다!] -setu..

p5js로 인터렉티브 흉내내기

중학교 이후 처음인 거 같다 블로그에 글을 쓰게 될 줄은 그렇지만 내가 좋아하는 명언 두 개가 있다 1. 기억보단 기록을 2. 하루하루는 성실하게 인생은 되는 대로 난 예체능 계열에 있는 사람이라 하루의 소중함에 대해 너무나도 잘 알고 하루가 모여 어떤 결과를 만들어 내는지도 잘 보고 경험했다. 여기까지만 하고 시작해보겠다! 겅력은 5개월 3개월 c/c++ 웹 개발은 2달 정도 공부했다 6~9월 사이에 국비 학원에 가기 전에 꼭 흉내 내 보고 싶은 작업물이 있어서 (나만의 생각인 줄 알았으나 너무 똑같은 작업물이 유튜브에...)2달 동안 이 악물고 카피라도 해보자! 하고 하루 7~8시간씩 노력해봤다! 결과는 내 기준 대성공! (p5js가 없었다면... 아마 불가능했을 것이다...) 2달 동안 치열했던 코..