러닝센터 8강
===[ 생성자 ]=====================================================================================
기본생성자
class Knight{
private:
string name;
int hp;
public:
// 생성자
// 1.메소드 타입
// 2.함수 이름이 반드시 클래스 명이랑 같다
// 3.리턴값이 없다.
// 기본생성자 - 매개변수 없이 기본 초기화를 수행
Knight(){
SetInfo("홍길동",150);
}
void SetInfo(string name, int hp){
if (hp <= 0) hp = 100; // 갭슐화
this->name = name;
this->hp = hp;
}
};
void main(){
// 기본 생성자 호출
Knight* knight = new Knight();
delete knight
}
===[ 소멸자 ]=====================================================================================
class Knight{
private:
string name;
int* hp;
void CreateHp(){
hp = new int;
}
public:
Knight(){
CreateHp();
SetInfo("홍길동",150);
}
// [소멸자]
// 1. 메소드명이 클래스명과 같음
// 2. 리턴값이 없음.
// 3. 객체가 소멸될때 자동으로 호출됨(생성자와의 차이)
// 4. 틸드( ~ )가 붙음 (생성자와의 차이)
// 5. 오버로드 할 수 없음 ( 매개변수 사용 할 수 없음 )
// 6. 객체안에 존재하는 동적 메모리 해제역할
~Knight(){
delete hp; // 동적으로 생성된 hp를 소멸함
cout << "소멸자가 호출됨" << endl;
}
// 캡슐화
void SetInfo(string name, int hp){
CreateHp();
if (hp <= 0) hp = 100; // 갭슐화
this->name = name;
*(this->hp) = hp;
}
};
void main(){
Knight* knight = new Knight();
delete knight;
}
===[ 상속 ]=======================================================================================
#include <iostream>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <Windows.h>
using namespace std;
//1. 중복을 찾아내라.
//2. 중복에 대한 내용의 공통성을 추상화 한 클래스를 작성해라
//3. 중복에 대해 추상화한 클래스에 중복 코드를 옮겨라.
//4. 추상화한 클래스를 상속해라.
//5. 자식 클래스에서 중복된 코드를 제거 해라.
class Character{
protected:
string _name;
int _hp;
int _damage;
public:
void Move(){
cout << "[" << _name << "] 님이 이동을 합니다." << endl;
}
void Hit(int damage){
cout << "[" << _name << "] 님이" << damage
<< " 데미지를 입었습니다." << endl;
}
void Die(){
cout << "[" << _name << "] 님이 사망 했습니다." << endl;
}
};
class Player : public Character// 상속받을 클래스명
{
private:
int _level;
int _gravity;
string _talkMessage;
public:
//생성자
Player(string name, string talkMessage, int damage){
_damage = damage;
_name = name;
_talkMessage = talkMessage;
cout << "[" << _name << "] 님이 접속하였습니다" << endl;
Talk();
};
~Player(){};//소멸자
void Talk(){
cout << "[" << _name << "] 메세지 : " << endl;
}
void Attack(){
cout << "[" << _name << "] 님이" << _damage
<< " 만큼의 공격을 합니다." << endl;
}
void Jump(){
cout << "[" << _name << "] 점프 하였습니다.." << endl;
}
};
class Monster : public Character // 상속받을 클래스명
{
private:
int _skillType;
public:
//생성자
Monster(string name, int skillType, int damage){
_damage = damage;
_name = name;
_skillType = skillType;
cout << "[" << _name << "] 님이 나타났습니다." << endl;
};
~Monster(){};// 소멸자
void Skill()
{
cout << "[" << _name << "] 님이 " << _skillType
<< "타입의 스킬을 사용합니다. " << endl;
}
};
class Creature : public Character // 상속받을 클래스명
{
private:
int _time;
public:
Creature(string name, int time) {
_name = name;
_time = time;
_hp = 100;
_damage = 50;
cout << "[" << _name << "] 님이 소환 됐습니다." << endl;
Timer();
};
~Creature() {};//소멸자
void Timer()
{
cout << "[" << _name << "] 님이 " << _time
<< " 시간뒤에 소멸됩니다." << endl;
}
};
void main(){
Player* player = new Player("티거", "저는 푸우의 친구 티거 입니다!!", 100);
player->Move();
player->Attack();
player->Hit(10);
player->Die();
delete player;
Monster* monster = new Monster("오우거", 2, 50);
monster->Move();
monster->Skill();
monster->Hit(10);
monster->Die();
delete monster;
Creature* creature = new Creature("멀록", 10);
creature->Move();
creature->Hit(5);
creature->Die();
delete creature;
}
================================================================================================
#include <iostream>
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
#include <string>
using namespace std;
// 중복코드를 가지고 만든 캐릭터 클래스
class Character {
protected: // 접근지정자 : 내부접근가능, 상속된 클래스에서 접근 가능 , 현재 클래스와 상속된 클래스에서 접근이 가능한 지정자.
// 중복 속성들
string _name;
int _hp;
int _damage;
public:
Character(string name, int damage) {
_name = name;
_hp = 100;
_damage = damage;
}
// 중복 메소드들
void Move() {
cout << "[" << _name << "] 님이 이동을 합니다. " << endl;
}
void Hit(int damage) {
cout << "[" << _name << "] 님이 " << damage << " 데미지를 입었습니다. " << endl;
}
void Die() {
cout << "[" << _name << "] 님이 사망했습니다. " << endl;
}
};
// 플레이어는 캐릭터를 상속함
class Player : public Character
{
private:
int _level;
int _gravity;
string _talkMessage;
public:
Player(string name, string talkMessage, int damage)
// 플레이어의 생성자를 호출하기전에 캐릭터의 생성자를 호출함
: Character(name, damage) {
_talkMessage = talkMessage;
_level = 1;
_gravity = 1;
cout << "[" << _name << "] 님이 접속하였습니다." << endl;
Talk();
}
~Player() {}
void Talk() {
cout << "[" << _name << "] 메시지 : "
<< _talkMessage << endl;
}
void Attack() {
cout << "[" << _name << "] 님이 " << _damage << "만큼의 공격을 합니다. " << endl;
}
void Jump() {
cout << "[" << _name << "] 님이 점프를했습니다. " << endl;
}
};
class Monster : public Character
{
private:
int _skillType;
public:
Monster(string name, int skillType, int damage)
: Character(name, damage) {
_skillType = skillType;
cout << "[" << _name << "] 님이 나타났습니다." << endl;
}
~Monster() {}
void Skill()
{
cout << "[" << _name << "] 님이 " << _skillType << "타입의 스킬을 사용합니다. " << endl;
}
};
class Creature : public Character
{
private:
int _time;
public:
Creature(string name, int time, int damage)
// 생성자 상속
: Character(name, damage) {
_time = time;
cout << "[" << _name << "] 님이 소환 됐습니다." << endl;
Timer();
}
~Creature() {}
// [메소드 오버라이드]
// 부모 클래스에서 상속받은 메소드를 자식 클래스에서 재정의 해서 사용 하는것을
// 메소드 오버라이드라 한다.
// 오버라이드 상속된 메소드와 이름을 같이 하여 해당 내용을 바꿀 수 있다.
void Move(){
cout << "[" << _name << "] 님이 " << "날아가는 듯이 뛰어갑니다" << endl;
}
void Timer()
{
cout << "[" << _name << "] 님이 " << _time << " 시간뒤에 소멸됩니다." << endl;
}
};
void main()
{
Player* player = new Player("티거", "저는 푸우의 친구 티거입니다!!", 100);
player->Move();
player->Attack();
player->Hit(10);
player->Die();
delete player;
Monster* monster = new Monster("오우거", 2, 10);
monster->Move();
monster->Skill();
monster->Hit(30);
monster->Die();
delete monster;
Creature* creature = new Creature("멀록", 10, 10);
creature->Move();
creature->Hit(5);
creature->Die();
delete creature;
}
=======[ C# 에서의 상속 ]=========================================================================
=======[ UNITY Animation ]============================================================
애니메이션 개별로 만들때
윈도우 -> 애니메이션 -> Add Property 윗 부분 클릭하여 Create New Clip 선택
sample -> 1초를 60프레임으로 나눔.
애니메이터 -> 애니메이션 클립 선택후 마우스 우클릭 -> 메이크 트랜지션.
트랜지션 라인 선택 후 인스펙터창 확인.
Has Exit Time 체크 해제 ( 해당 애니메이션이 지난 뒤 다음 애니메이션이 실행)
애니메이터 창에서 왼쪽 상단 Parameters 선택 -> Trigger 선택 -> 네이밍 입력
박스콜라이더 2D로 입력
게임오브젝트에 메소드 입력
void OnMouseDown()
{
GetComponent<Animator>().SetTrigger("Hit");
}
댓글
댓글 쓰기