제 2강 공부한 내용입니다.
const 키워드란?
한마디루 변수를 상수화 시켜주는 것 입니다.
움직이는 값이 아닌 정해진 하나의 값으로 만들어주는 키워드죵
const int i = 10;
i=20;
이런식으로 하면 에러가 나겠쬬? 움직이지 못하는 값이니까요~ ㅎ
stack 이란 ?
메모리 공간에 나오는 개념
흠...스택이라함은 메인 함수가아닌 호출함수에 쓰이는 매개변수나 지역변수를 저장하는 공간이라고
설명하면 되겠다. 일회용으로 한번 사용하고 그 값을 지워버리는 공간? 이다.
heap 이란 ?
힙이라고 함은 프로그래머가 직접 할당하는 영역인데 여기서 사용하는것이 c에서는 말록과 프리함수였다.
만약 배열의 크기를 입력받는다고하면 거기에 몇바이트를 줘야 할지 컴파일러는 알수없다. 한마디로 사용자가 입력하는 값자체를 메모리 크기로 할당해야되는데 그걸 컴파일러는 알수없고 프로그래머도 알수없다. 그래서 말록 함수로 그 받은 크기만틈 메모리를 할당해준 곳이 힙이란 영역이다. 힙의 영역에 할당된 메모리는 프로그래머가 삭제하기 전에는 사라지지 않기 떄문에 꼭 프리함수를 써서 삭제 시켜줘야한다.
int* arr=(int*)malloc(sizeof(int)*size);
free(arr);
위 두문장이 한세트로 다녀야 한다. arr이라는 동적배열의 메모리 선언과 프리함수로 arr의 메모리를 삭제해주는 구문이다.
bool 이란?
다음은 bool의 자료형에 대해서 배웠다 한마디로 true false의 값을 반환해주는 자료형인데..
흠......뭐 c에서 일일이 선언하는 것보다 이거에 관한 자료형이 있으니 편한거 말고는..확실히
필요한지는 잘모르겠따 - _- ;;;물론 int값으로 bool형을 반환하면 1(true),0(false)이 나온다
래퍼런스란 ?
무지무지 c++에서 중요하다고 말하는 래퍼런스를 배웠다.
int b;
int& a=b;
b라는 놈에게 a라는 이름을 중복으로 설정해주는 것이다.
한마디로 b의 이름이 두개가 생긴것이다.
래퍼런스의 활용은 정말 많을 듯 싶다.
일단 데이터를 확실하게 줄일수 있다. 한 데이터에 이름만 여러게 만들어줘서 하기때문에
데이터 관리에 용이하다는 점.
메인함수의 있는 것들 함수로 받아서 처리할때도 래퍼런스를 활용하면된다.
함수에서도 메인함수의 데이터에 접근이 가능하니 편리하다
물론 메인함수의 영향을 안미치기 위해서는 const 키워드를 사용하면된다
이것을 상수화하여 더이상 값이 변하지 못하게 하는것이다. 참조를 할때
사용하면 될듯 하다.
제2강에서는 래퍼런스가 가장 중요할 듯..
분류 전체보기
- c++ 제 2강 공부한 내용 2008.11.09
- 정열맨 게임 2.0버젼 기획사항 2008.11.04
- c++ 제 1강 공부한 내용 2008.11.03
- 닉네임 변경 2008.11.03
- 플래시 간단한 공 튕기기 2008.11.03
- 플래시 무비클립 회전시키기2(Math.atan2) 2008.10.29
- 정열맨 게임 반응 2008.10.28
- 네이버, 다음 메인플래시 안보일 때 2008.10.24
c++ 제 2강 공부한 내용
정열맨 게임 2.0버젼 기획사항
1 . 스테이지 방식으로 변환 각 스테이지마다 나오는 케릭터 변경.
2. 아이템 형식의 추가 각 케릭터중 아이템을 주는 케릭터 넣어서 죽일때마다 특정 아이템이 나옴.
3. 각 케릭터마다 때려야하는 키가 있음 거기에 맞게 키를 눌러야 함.
4. 눌러야 하는 키를 순간적으로 뜨게 만듬. 좌우 위아래
5. 콤보테스트의 추가.
-----------------------------------------------------------------------------------------
아이템 구현. 슬로우 효과 아이템, 변신아이템, 고무고무 아이템(구현가능성 확인해야대 ㅠ)
-----------------------------------------------------------------------------------------
c++ 제 1강 공부한 내용
제가 공부하기 위해서 블로깅 하는 것이므로-_-;;전혀 도움안되는 내용을 가지고 있습니다 ㅠ
-------------------------------------------------------------------------------------
c++ 입력 및 출력
cout , cin, endl
printf , scanf, \n
두개가 같은 뜻으로 사용됨
c++은 함수 오버로딩이 가능한데 오버로딩이란 같은이름의 함수지정이 가능 하다는 것이다.
void function(void){
}
void function(int i){
i=0;
}
c에서는 불가능햇지만 c++에서는 매개변수의 수에 따라 같은 함수 지정이 가능하다.
이유는 컴파일시에 매개변수의 차이까지 정보로 가지고 있기때문에 아예 다른 함수로 인식한다.
매개변수의 경우 void function(int 1=0){
} 이라고 했을 경우 매개변수가 들어오지 않으면 0으로 초기화 시킨다.
c의 #define 매크로의 경우도 다른 개념을 배웠다.
inline이라는 함수 인데 이 함수자체가 디파인과 같은 기능을 지닌다고한다.
하지만 인라인의 경우 함수를 매크로처럼 지정할수 있어서 c에서 매크로로 코딩하기 어려웠던 것을
아주 편하게 함수처럼 지정할수있다.
오버로딩에서 문제점은 같은 함수의 이름을 지정시에
function()이란 함수를 호출했다고하자
void function(void){
}
void function(int i=0){
i=0;
}
자 그럼 위에 두함수는 어떻게 되겠는가?
분명 둘다 호출이 될것이다. 아무것도 매개변수로 전달되지 않았다면
처음 매개변수가 보이드인 놈도 호출될것이고 전달안됐을때 0을 매개변수 초기화하라는 놈도
실행될 것이다 이 문제를 해결하기 위해서 등장한 것이 이름공간이란다.
공간에 이름을 지정한다.
namespace A{
void function(void){
}
}
namespace이놈이 바로 공간을 지정하는 놈인데 그뒤에 따라오는 변수가 그 공간 이름이 된다.
A라는 이름공간을 마련한 셈이다 그안에 fucntion이라는 함수가 들어있다
그럼 이놈을 출력할때에는 A::function(); 요런식으로 실행해준다
에이란 이름공간안에 펀션이라는 함수를 실행하라 이뜻이다.
네임스페이스가 확실히 편리하고 도움이 되지만 그 호출할때 이름이 길어지기때문에
조금 불편할수도 있다 그래서 이것을 해결하기 위해 사용하는 것이 using이다.
using A::fucntion(); 으로 선언하면
fucntion으로 바로 호출이 가능하다.
using A::function;
int main(void)
{
function();
return 0;
}
간단하게 이런식인데 이름공간안에있는 함수를 쉽게 불러오기 위함이다.
헷갈리는 것은 굳이 이름공간으로 두함수를 주었다고 하자...
그것을 편하게 불러오기위해 function();으로 넣는다면..
오버로딩시 에러가나는 두함수가 함께 불러올때를 해결할수 있는가?
#include <iostream>
namespace A_COM
{
void function(int i=0)
{
std::cout<<i<<std::endl;
}
}
namespace B_COM
{
void function(void)
{
std::cout<<"A.com에서 정의한 함수"<<std::endl;
}
}
using A_COM::function;
using B_COM::function;
int main(void)
{
int a=10;
function();
return 0;
}
한마디로 이런고민인데 메인 함수에서 펀션을 불러왔을때와 펀션(a)를 불러왔을때
쉽게 사용하기 위해 유징을 사용한다면 똑같은 문제가 다시 발생하는건 아닌가?
...사용이 안되겠지?당연히-_-?;; 이름공간을 없애버리는게 유징아닌가?;;;
그럼 왜 유징을 사용하는거지-_-;;편리하기위해? 아무튼 오버로딩에서 이름공간에 유징까지
세가지가 혼합되니까 상당히 헷갈린다;;;;;;;;;;
오버로딩때문에 이름공간을 나누었더니 유징으로 없애서 다시 원상태?-_-;;
뭐 이해하기로는 대충 유징은 필요한 함수에게만 사용해서 그것을 편리하게 사용한다 이정도로
이해해둬야겠따..더생각하다간 더 뒤죽박죽이 될듯..
ㅡ_-뭐 틀린점있으면 댓글좀 달아주세용 ㅠㅠㅠ 열심히공부할게염 ㅋㅋ
닉네임 변경
이제부터 내가 쓸 닉넴은 - _- 지에고( 지금에 와서 GOGO - _- )
-_-뭐 늦었으니빨리 가자는 뜻이지뭐 ㅋㅋ5초만에 생각난 ㅋㅋ거야 ㅋㅋ
지금에 와서 고고 ㅋㅋㅋ내가 생각해도 웃기다 ㅋㅋㅋ
플밍을 할생각이 없었는데...어쩔수없이 이쪽으로 가게 되네...그래서
빡시게 하고있으니까 닉넴도 상콤하게 바꿔서 한번 가보려고 ㅋㅋ
가자 + _ +지에고.......유치해-_-그래도..바꾸고싶은데..어떡해 ㅋㅋㅋㅋㅋㅋ
용뇽 - > 지에고
고고 + _ +
플래시 간단한 공 튕기기
이번에는 간단한 공 튕기기에 대해서 알아보겠습니다.
여기서 알아야 할것들은 결국 좌표를 일정하게 더해주고 또 바닥면에 부딪쳤을 때 + - 로 수정하면 됩니다.
한번 액션스크립트를 보겠습니다.
500/200 인 창에다가 ball 과 floor 란 두개의 무비 클립을 만들었습니다.
ball이란놈에게 속도를 줍시다.
위에서 아래로 떨어질때는 일정한 가속도가 더해집니다. 중력가속도라고 하죠?`ㅡ`?
만약 가속도가 0.2라고 할때 공이 움직이는 속도는 0.2 /0.4/ 0.6 이렇게 순차적으로 빨라져야 할것 입니다.
그럼 지정해주조
ball.speed = 0; // 요놈이 공의 속도를 저장할 변수입니다.
ball.gung = 0.5// 가속도를 0.5 라고 지정하죠
자그럼 ball.speed+=ball.gung;
속도를 지정해놓았습니다 안에 수치는 0.5씩 자꾸 커지겠죠?
그럼 공에 이 속도를 넣어봅시다
ball._y+=ball.speed;
다음은 평면상에 공이 닿았을때 반대방향으로 움직이게 합시다.(쉽습니다+_+생각이떠오르죵?)
나의사랑 if문
if(ball._y+ball._width/2>floor._y){
ball.speed=ball.speed*-1;
}
조건문은 공의 Y좌표(공의중간) + 공의 중간점에서 반지름 크기만큼 더해준 값이
바닥 floor 에 닿으면 -1의 값을 줌으로써 그 방향이 바뀌게 한다.
그럼 공에 닿는 순간 방향이 바뀌게 될것이고 거기에 계속해서 0.5라는 가속도값을 계속 더해줄 것이다.
ball.speed가 -값에서 다시 0이되면 멈추게되고 다시 0.5씩 더함으로 또 아래로 움직이게 됩니다.
바로 공 튕기기가 시작 된 것 입니다 + _ +
ball.speed = 0;
ball.gung=0.5;
_root.onEnterFrame = function(){
ball.speed+=ball.gung;
ball._y+=ball.speed;
if(ball._y+ball._width/2>floor._y){
ball.speed=ball.speed*-1;
//trace(ball.speed);
}
}
제가 실행한 총 소스 입니다. 아래 trace는 speed의 값의 변화를 보기 위해서 작성 했습니다.
공부하실때 보시면 좋습니다. 왜 공이 점점 튕기는 게 줄어드는지 같이 고민해봅시다+_+
-------------------------------------고민후
이유인즉 공이 바닥에 닿는 순간 -값이 되고 또 그동시에 가속도값이 더해짐으로
그 순간 속도 값만큼 차이가 나게 됩니다. 공이 떨어지는데 까지 10의 속도가 필요했으면
바닥에 닿는 순간 -10이됨과 동시에 0.5의속도가 더해짐으로 -9.5에서 다시 출반하는 거죠
이것이 반복 되다보니 0.5씩 자꾸 수치가 줄어듬으로 튕기는 높이가 줄어드는 것이죵-0-!!
다음 시간에는 - _ -b 엑스 축으로 값을 추가해줘 봅시당 - _ -오른쪽 왼쪽으로 공 튕기기 !!
플래시 무비클립 회전시키기2(Math.atan2)
게임 제작시에 탱크게임이나 간단한 슈팅게임을 제작할때 커서를 따라가는 식의 방식이 필요할때 자주쓰입니다
마우스 좌표 값을 수치로 확인하여 각도를 구합니다.
자 그럼 어떻게 움직이는 지 한번 봅시다.
_root.onEnterFrame = function() { //매프레임 마다~
ax=_xmouse - _root.angle._x;//x마우스좌표-포탄엑스좌표
ay=_ymouse - _root.angle._y;//y마우스좌표-포탄와이좌표
_root.angle._rotation=Math.atan2(ay, ax)*180/Math.PI;//각도 구하는 공식
}
아주 간단합니다^^
자 ax라는 변수에 엑스마우스 좌표 빼기 angle라는 인스턴스넴이있는 무비클립 좌표를 빼줬습니다.이유인 즉
저기 파란색 삼각형이 끝나는 지점이 마우스 입니다 회색으로 살짝 보이죠
우리가 필요한 것은 저기 파란색으로 표시되어있는 각도 값입니다.
저 각도를 알아야 포탄을 rotation 함수를 사용해서 움직이겠죠?
여기서 사용 되는 것이 Math.atan2(와이좌표, 엑스좌표) 입니다.
앞시간에 각도 값을 라디안으로 바꾸는 공식 기억하시죠? 라디안 = Math.PI/180*각도;
그럼 라디안을 각도 값으로 나오게 하겠습니다(rotation은 각도값으로 움직입니다)
라디안*180/Math.PI*라디안 = 각도;
설마 이해 안되시는 분은 없지요 그냥-_-각도 값만 놔두고 다 넘긴거에요~
자 정리하면
Math.atan2(y좌표, x좌표)*180/Math.PI = 각도;
우리가 원하는 각도 값이 나왔습니다.
그럼 다했습니다.
_root.onEnterFrame = function() { //매프레임 마다~
ax=_xmouse - _root.angle._x;//x마우스좌표-포탄엑스좌표
ay=_ymouse - _root.angle._y;//y마우스좌표-포탄와이좌표
_root.angle._rotation=Math.atan2(ay, ax)*180/Math.PI;//각도 구하는 공식
}
ax,ay는 마우스좌표와 무비클립의 거리를 구하는 것입니다~
angle이라는 무비클립에 로테이션 값을 = 우리가 구한 각도로 움직여라.
자 잘 움직이시나요~-0-? 뭐 다 아시겠지만 포탄의 중심점을 끝으로 해두셔야 포탄이 -_-
가운데에서 돌아가는 것을 방지 할수 있습니다~
정열맨 게임 반응
주전자닷컴에 한번 올려봤다..
이 사이트 만드신분이 우리 학과에서 강의를 한번하셨는데 그때가 갑자기 생각나서 올리게 되었다.
오늘 올렸는데;;;댓글하구 조회수가 꽤 많이 들어오고 인기 게임에도 뽑혔다..-_-..뭐 아무것도 안주지만..
초등학생과 중학생이 대부분 유저층인듯하다...재밋다는 반응과 조금 어렵다는 반응?
사실 이 게임을 만들때 아무생각없이 플래시 액션스크립트를 공부하는 셈 치고 만든 것이라..
재미있는요소나 기획에 신경을 못 쓴게 사실이다...군대안에서 만든 액션스크립트라서 꼭 완성하고 싶었을뿐..
간단한 게임이지만 학생들이 좋아해주니...-_-기쁘다;;;;하하;;;이런.....-_-;;;
이번에 과제로 플래시게임제작이있다......하..또......만들어야대......-_-...이번엔 기획해서 만들테다 + _ +
네이버, 다음 메인플래시 안보일 때
자 요런식으로 나올 때 해결 방법을 찾아보도록 합시다.
뭐 여러가지 경우가 있습니다.
1. 알툴바 설치 하셨을 경우 플래시 제한 기능을 꺼주시면 되구요~
2. 인터넷 위쪽에 도구 - 추가기능 - 추가기능사용 또는 뭐뭐~
거기 들어가셔서 플래시 플레이어 사용안함 되어있는걸 사용으로 바꾸시면 됩니다.
1,2 방법도 안되는 경우가 있습니다.
클릭투트윈이나 알약의 고급모드에서 엑티브를 정리하시거나 할때 에러가 가끔 발생하는데요
뭐....아무리해도 안될 겁니다...트윈에서 아마 설정을 이상하게 하셨가나 하는 경우에 발생하거든요
이때 한방에 해결하실수 있는 방법이 바로
인터넷 익스플로어 속성에 들어가셔서 고급으로 가셔서 원래대로만 클릭해주시면 자동으로 모든 임시파일을 삭제하고 원래의 설정으로 돌려줍니다. 무엇이 잘못 됐는지 모를때 사용하는 방법입니다. + _ +
한번에 다들 고쳐버리세용 -0- ! !