2017의 게시물 표시

전문가를 위한 c++ 18장 함수오버로딩

오버로딩 개활  + , < , * , << 같은 연산기호로 int같은 형을 산술또는 논리연산등을 하는데 이용. 또는 . ->같은 포인터 역참조도 가능하다,[],() 같은 함수호출과 타입캐스팅또한 가능하다. 재정의 가능. 오버로딩을 하는 이유 - 커스텀 클래스를 내장타입처럼 사용하려고 쓰인다. - 프로그램 동작방식을 더 강력하게 한다. 제약사항 - 이미 지정된 목록의 특수기호만 사용 - . , :: , sizeof , ? : ,같은건 오버로딩 불가. - 연산자 인자갯수는 바꿀 수 없다. ++ 은 하나, + 는 2, 유일한 삼항연산자 ?:는 3개 - 우선순위와 결합규칙은 바꿀 수 없다. - 내장타입 연산은 바꿀 수 없다, - 한개의 기호에 여러기능을 넣을 수도 있다. 예) x = y + x ; x = + y의 +는 2개의 의미 오버로딩시 friend을 많이 사용하며, operator를 사용하여 재정의 가능하다. - 함수로 오버로딩 해야하는 연산자 : operator =  대입에 의미가 있어서 메서드여야만함. - 전역함수로 오버로딩해야하는 연산자 : +,-같이 좌우가 서로 교환되는것. - 메서드 전역함수 어느것으로도 오버로딩가능연산자 : 왠만하면 함수로한다, 그래야 virtual 사용가능 friend로 virtual 사용불가 -메소드로사용시 const를 써주면 객체를 대상으로도 작동한다. 리턴타입선택 비교연산자가 포인터를 리턴하던가 산술이 bollion값을 리턴하는등의 문제가 있을수있음. 내장타입과 같은타입을 리턴시키자 좌향대입이 변경된다면 non-const로 정의 +로 숫자말고도 문자열 붙히기등으로 은유해서 사용가능. 오버로딩 하면 안되는것들(사용 가능해도 혼란을 가져옴) &, 주소를 못불름 ||, && 생략원칙또한 깨진다. 콤마도 연산자인데. 순서를 보장못한다. 우측값 참조 원형 T& ope...

GPG 3권 챕터1.2 객체 조합식 게임 프레임웍

객체조합에 기반한 게임 프레임웍 설계(뭐라는거야?) 특정한 서비스들을 제공하기위한 협동적으로 작동하는 객체들의 틀로써 쉽게말하면, 개임개발 초기에 빨리 툴 프로그램 만들때 사용한다. 잘만들어야 리팩터링 안한다 제작단계에서 : edit를 필수적으로 제작하며, 발매할때 유저도 같이 쓸 수 있게 만든다. 통합단계 : 다양한 게임모드를 하나로 통합시킨다. 테스트단계 : 다양한 지점에서 시작해야한다. 드라이버도 바꿀 수 있어야한다. 게임 프레임워크 설계 1.게임에 따라 플랫폼을 독립적으로 넣을지 의존적으로 뺄지 결정한다. 2.하나의툴에 여러게임이나오면 독립적, 하나의툴이 하나의게임에 나온다면 의존적이게된다(엔진을 말하는건가?) 3. 상속이아닌 객체조합을사용한다(컴포넌트 여러개 붇히는거겠죠?) 4.프레임기반또는 함수기반작동 아마 3권챕터1.1의 내용일것이다. 5.연산순서를 동적이나 정적이냐 6.객채수명이 동적이나 정적이냐그럼 재사용된 스클립트정렬이 꼬일 수 있다. 7.응용프로그램이 각 객체들을 수평이나 수직적으로 움직이게 하느냐. 게임 프래임워크 구연 Init, Shutdown같은것들을 말한다. DLL을 이용해 동적인터페이스를 만드는것을 추천.

간단하게 언리얼 배터리 콜랙터 정리

언리얼 c++ 배터리 콜랙터 1장. 인트로 + 오리엔테이션 (별거없음) 2장. 파일 이주와 디폴트 신 설정(별거없음) 3장.프로그래밍 -generated.h아래에 해더를 추가할수없다. buildtool이 제일 마지막에 찾아서 인식하기때문이다. - UCLASS()메크로, 가비지콜렉션, 키워드등등 UObject(언리얼 전용)기반으로 클래스를 설정한다.  -GENERATED_BODY로 엔진링킹(엔진연결)을 한다. -UPROPERTY(접근제한, 블루프린트 접근데한, 카테고리,메타순으로 나열) -CreateDefaultSubObject라는 메크로 핼퍼가 값을 할당하게 도와준다. 4장. 값넣기. 함수들 - BlueprintPure접근으로 코드상으로 값변경이 가능하나. 블루프린트에선 안받으므로, 스택애서 반환하는경우 값이 2번 Pop되므로 Get함수용으로만 사용하고, BlueprintCallable로 값할당사용, blueprintCallable은 값이 자주안바뀌고 연산이 오래걸릴때 사용 5장. 배터리 생성 (별거없음) 6장. 어디다 생성할것가 - GetMesh()->SetSimulatePhysics(true);로 물리처리 온! - #include "Kismet/KismetMathLibrary.h"로 수학 함수를 불러올수있다. -FVector SpawnOrigin = WhereToSpawn->Bounds.Origin; FVector SpawnExtent = WhereToSpawn->Bounds.BoxExtent; return UKismetMathLibrary::RandomPointInBoundingBox(SpawnOrigin, SpawnExtent); 이렇게 하면 박스모양 랜덤포인터를 만들 수 있다. 7장. 어떻게 넣을것인가? - World->SpawnActor<APickUp>(Spa...

GPG 3권 챕터1.1 게임 이벤트 관리

(아마도 unity->edit->TimeManager와 같이 호출을 프레임과 다르게 하는법인것같다.) 이벤트관리 이하 스케줄러라한다. 랜더링, 에니, AI, 충돌검출, 물리를 매 프래임처리와 다르게 처리하는것을 말한다. 병목현상을 방지하기위함이다. 스케줄러는 즉석에서 추가, 제거가 가능해야한다. 구조 스케줄러 :  클럭 <- 이벤트관리자 -> 작업관리자 -> 작업 클럭 : 매시간(deltatime같은거) 이벤트관리자 : 클럭채크 후 제 시간이되면 작업관리자에게 일 할당, 시간갱신, 작업갱신등의 일도 한다. 작업관리자 : 이벤트관리자가 일주면 함 가상시간 : 단방향 시간과 달리 정지하거나 더빨리돌리게 조작가능한시간 시뮬레이션 시간 : 스케줄러에서 사용하는 가상시간(별 차이 없음) 특징 - 잘만 이용하면 순차디버깅 가능. - 시뮬레이션이 시작될때 0으로 시작 - 적당히 호출하면, 사용자는 끊긴다는걸 모르지만, 일관수행하면 지연문제가 발생안한다. - 작업이 순차적으로 수행하며, 프래임마자 작업중간에 갱신된다. 예) 20프레임당 렌더한다했을때, 51과54프레임에 변화가 생겼다면, 40프레임은 결과를 모르니 60번째 랜더순간에서 54프레임(마지막)만 랜더하면 됨 이벤트 종류들 N프래임 (N = 1) : 프레임1번할때 1번호출(unity에 update나 tick인것같다.) 시간차 호출 : 설정한 시간간격으로 호출, 일정하지 않게도 할수있다. 클럭 지난시간과 현제시간을 비교해서 시간을 결정 클럭이 1ms면 충분하다. 더필요하면 여러개두고 해상도를 높일수있다(그럴 필요가 있나?) 반올림 오차에 주의 순차처리 여러 작업을 동시에 할경우 우선순위를 주어서 연산을 시킬수있다. 우선순위가 같으면, 순환식(round-robin)을 주어서 처리. 작업관리자의 세부사항 작업할게 여러개면 list빠른 순차로 뽑아 연산후, 목록에 넣을때 적절한 곳에 삽입 그래야 빠른검색과 목록앞에 머문다....