공부/SFML

SFML - 벌 구름 나무 출력, SFML - 벌 구름 이동, SFML - 벌 구름 크기 변경, 월드 좌표계, 로컬 좌표계, 구조체, 난수, 랜덤출력, deltaTime, 등속도 운동, 플립, 벡터2D

월러비 2025. 6. 11. 18:18

SFML - 시작

  • sfml 그리기는 2가지 부류가 있다.
    • 텍스쳐 (리소스) : 이미지, 사운드 등의 정보 저장
    • 스프라이트 : 리소스 정보를 받아서 사용 및 활용
      • 위치, 회전, 스케일 등
  • 그리기 순서
    • 위에서 아래로 진행하기에 위에있는 코드가 먼저 그려진다.
    • position, origin, scale이 3가지가 이미지를 그리기 위해 필요한 것들이다.
  • main 함수에서 하는것은 update와 draw다.
    • 이게 한프레임이다.
    • 드로우 : 세팅되어있는 값 그리기
    • 업데이트 : 변경해야 할 값 수정

월드 좌표계

  • 화면의 수치를 표현하려면 기준이 있어야한다.
    • 화면의 증가 방향을 잡는 기준 : 좌표계
  • 2차원 좌표 평면의 방향 표현 : X Y
  • SFML의 기준 좌표 : 좌측 상단이 (0, 0)이다.
    • 오른쪽 : X+
    • 아래 : Y+
    • 우측 하단 : (1919, 1079) - 0, 0으로 시작해서이다.

로컬 좌표계

  • 해당 객체 자체가 기준이 되는 좌표계다.
    • 배경위에 놓인 캐릭터의 그림 좌측 상단이 (0, 0)이다.
  • 피봇(오리진) : 기준점 - (0, 0)
    • 피봇을 이미지의 중앙으로 옮긴다면? : 중앙이 (0, 0)이 된다.

구조체

  • struct가 있다면 해당 코드블럭은 그 구조체의 ‘선언부’가 된다.
  • 코드블럭 : 구조체의 멤버들을 정의한다.
  • 선언한 구조체는 데이터 형처럼 ‘객체’를 선언할 수 있다.
    • 선언한 객체 변수에는 구조체에 정의한 멤버 변수 및 함수를 사용할 수 있다.
  • 구조체의 멤버변수는 구조체의 객체가 선언될때 메모리에 올라간다.
    • 삭제는 해당 변수가 삭제될때 같이 삭제된다.
  • 같은 구조체의 변수를 생성하더라도 각각의 객체의 멤버 변수는 서로 고유한 변수가 된다.

난수

  • 랜덤한 숫자를 의미한다.
  • 프레임 : 프로그램 흐름이 1번 주기가 진행된 시간
    • 60프레임 ; 1초에 60번 코드가 반복되는 것이다.
  • 컴퓨터의 성능과 상관없이 동일한 프레임이 나오려면 단위 시간을 맞춰야한다.
    • deltaTime이라고 한다.
  • (float)rand() / RAND_MAX로 하면 0.0 ~ 1.0 즉, 실수값이 나온다.
    • 나오는 값이 몫이니까
#include <ctime> - 시간 관련 헤더파일
#include <cstdlib> - 난수 관련 헤더파일

float random = (float)rand() / RAND_MAX;

배열의 랜덤출력

  • 배열은 선언과 초기화가 지나면 사이즈가 정해져있다.
    • 0 ~ n -1까지
  • 사이즈는 나머지 연산의 수, 초기 인덱스는 +- 첫번쨰 인덱스를 넣으면 된다.
    • 1 ~ 6의 배열
    • rand() % 6 + 1 ⇒ 1번요소 ~ 5번요소까지 랜덤 출력된다.
  • 시드값 : 랜덤한 값이 동일한 랜덤 숫자가 나오도록 지정하는 값이다.

deltaTime

  • 프레임간의 시간 차
    • 첫 프로그램 시작 시간과 다음 반복되는 프로그램 시작 시간의 차다.
    • 이걸 곱하면 각 컴퓨터의 성능 차 없이 프레임이 동일해진다.

등속도 운동

  • 속도 ⇒ v = d(거리) / t(시간)
    • 거리는 픽셀로 계산한다.
    • 100 = 1초에 100픽셀 이동
  • v * t = d
    • 속도는 직접 지정하고, 시간은 deltaTime
    • 즉, 위치 += 속도 * deltaTime이 된다.

플립

  • 뒤집기의 기준은 그림의 중앙이 되어야한다.
    • setOrigin으로 피봇(기준점)을 변경한다.
    • getSize().x * 0.5f 로 설정하면 절반이 된다.
  • 음수값이 방향 바꾸기이다.
    • -1.f, 1.f : 오른쪽 보기

벡터2D

  • 벡터는 ‘방향’과 ‘크기’(속력)를 나눠서 볼 수 있다.
  • direction = {1.f , 0.f } / speed = 200.f;
    • velocity == direction * speed
    • 결과 : { 200.0f , 0.f }
  • 즉, 세분화해서 수정하려면 2개를 나눠서 봐야한다.

define - 식별자