자유롭게 이야기를 적는 공간
글 수 15,188
추억의 냉무
가 아니라 어디부분을 손봐야하죠?
보통 비쥬얼노벨 게임을 하다보면 어딘가로부터 도망친다던가 할때,
전체그림이 줄어들면서 이동을 하거나,
어디로 들어갈때 문그림이 확대되면서 다음 장소로 이동이 되죠.
그 외의 경우에도 많이 쓰이고요.
이런 기본적인 기능이 없다니...
예를들어 1024 x 768 그림을, 600 x 500으로 그린다고 합시다.
제 엔진에서는 서페이스 크기를 줄이면 거기에 맞춰져서 출력되는 구조라서 그렇게했는데, 안됨.
흥크에서는 서페이스 줄이면 그냥 그림이 잘려서 나옴.
1. 맨 마지막 백버퍼 뒤집는 부분.
근데 여기서 뭔짓을 해도 안바뀌던데
if((pit->second).show)
{
int px = (pit->second).x;
int py = (pit->second).y;
JPictureInfo pi;
pi.SetColorKey((pit->second).key);
pi.SetOpacity((pit->second).opacity); jdd->SetPictureInfo((pit->second).id, &pi); (중략) //뒤집기
if((pit->second).flip)
{
jdd->DrawPictureEx(jdd->GetBackBufferID(), (pit->second).id, ppx+px, ppy+py, NULL, (pit->second).flip);
}
//일반 출력
else
{
jdd->DrawPicture(jdd->GetBackBufferID(), (pit->second).id, ppx+px, ppy+py, NULL);
}
} 2. JDD->DrawPicture 부분. 여기서 뭔짓을 하면 바뀔거같은데 안바뀜
bool JDirectDrawImp::DrawPicture(int iddest,int idsrc,int px,int py,LPRECT pRect)
{
if(!table[idsrc] || !table[iddest]) return false; JobItem* p=new JobItem;
p->type=JobItem::DrawPicture;
p->surf1=iddest;
p->surf2=idsrc;
p->point1.x=px;
p->point1.y=py; if(pRect)
{
p->srcrect=new RECT;
*p->srcrect=*pRect;
} else p->srcrect=NULL; return AddJobList(p);
} bool JDirectDrawImp::DrawPictureEx(int iddest,int idsrc,int px,int py,LPRECT pRect,DWORD dwFlags)
{
if(!table[idsrc] || !table[iddest]) return false; JobItem* p=new JobItem;
p->type=JobItem::DrawStretchedPicture;
p->surf1=iddest;
p->surf2=idsrc;
p->point1.x=px;
p->point1.y=py;
p->srcrect=new RECT;
if(pRect)
{
*p->srcrect=*pRect;
} else {
p->srcrect->left=0;
p->srcrect->top=0;
p->srcrect->right=table[idsrc]->GetWidth();
p->srcrect->bottom=table[idsrc]->GetHeight();
pRect=p->srcrect;
}
p->destrect=new RECT;
p->destrect->left=px;
p->destrect->top=py;
p->destrect->right=px+pRect->right-pRect->left;
p->destrect->bottom=py+pRect->bottom-pRect->top;
if(dwFlags&DPX_HFLIP)
{
int t=p->srcrect->right-1;
p->srcrect->right=p->srcrect->left-1;
p->srcrect->left=t;
}
if(dwFlags&DPX_VFLIP)
{
int t=p->srcrect->bottom;
p->srcrect->bottom=p->srcrect->top;
p->srcrect->top=t;
}
return AddJobList(p);
} 3. 방안3으로 MLC를 불러올때 확대해서 받는 방법 그러면 만약 1000x700 그림을 1800x1500로 확대하는 것이라 합시다. 물론 중간과정이 있겠죠. 그럼 정해진 일정의 지연시간동안, 그림1 : 1000x700 그림2 : 1100x800 그림3: 1200x900 ... 그림9 : 1800x1500 이렇게 변한다고 했을때, 이 한 과정을 위해서 같은 그림을 서로다른 크기로 9개 받아두면 너무 손해잖아! 그래서 시도안해봄. 어제 이것만 5시간 넘게 했는데 안되서 질문.
{
int px = (pit->second).x;
int py = (pit->second).y;
JPictureInfo pi;
pi.SetColorKey((pit->second).key);
pi.SetOpacity((pit->second).opacity); jdd->SetPictureInfo((pit->second).id, &pi); (중략) //뒤집기
if((pit->second).flip)
{
jdd->DrawPictureEx(jdd->GetBackBufferID(), (pit->second).id, ppx+px, ppy+py, NULL, (pit->second).flip);
}
//일반 출력
else
{
jdd->DrawPicture(jdd->GetBackBufferID(), (pit->second).id, ppx+px, ppy+py, NULL);
}
} 2. JDD->DrawPicture 부분. 여기서 뭔짓을 하면 바뀔거같은데 안바뀜
bool JDirectDrawImp::DrawPicture(int iddest,int idsrc,int px,int py,LPRECT pRect)
{
if(!table[idsrc] || !table[iddest]) return false; JobItem* p=new JobItem;
p->type=JobItem::DrawPicture;
p->surf1=iddest;
p->surf2=idsrc;
p->point1.x=px;
p->point1.y=py; if(pRect)
{
p->srcrect=new RECT;
*p->srcrect=*pRect;
} else p->srcrect=NULL; return AddJobList(p);
} bool JDirectDrawImp::DrawPictureEx(int iddest,int idsrc,int px,int py,LPRECT pRect,DWORD dwFlags)
{
if(!table[idsrc] || !table[iddest]) return false; JobItem* p=new JobItem;
p->type=JobItem::DrawStretchedPicture;
p->surf1=iddest;
p->surf2=idsrc;
p->point1.x=px;
p->point1.y=py;
p->srcrect=new RECT;
if(pRect)
{
*p->srcrect=*pRect;
} else {
p->srcrect->left=0;
p->srcrect->top=0;
p->srcrect->right=table[idsrc]->GetWidth();
p->srcrect->bottom=table[idsrc]->GetHeight();
pRect=p->srcrect;
}
p->destrect=new RECT;
p->destrect->left=px;
p->destrect->top=py;
p->destrect->right=px+pRect->right-pRect->left;
p->destrect->bottom=py+pRect->bottom-pRect->top;
if(dwFlags&DPX_HFLIP)
{
int t=p->srcrect->right-1;
p->srcrect->right=p->srcrect->left-1;
p->srcrect->left=t;
}
if(dwFlags&DPX_VFLIP)
{
int t=p->srcrect->bottom;
p->srcrect->bottom=p->srcrect->top;
p->srcrect->top=t;
}
return AddJobList(p);
} 3. 방안3으로 MLC를 불러올때 확대해서 받는 방법 그러면 만약 1000x700 그림을 1800x1500로 확대하는 것이라 합시다. 물론 중간과정이 있겠죠. 그럼 정해진 일정의 지연시간동안, 그림1 : 1000x700 그림2 : 1100x800 그림3: 1200x900 ... 그림9 : 1800x1500 이렇게 변한다고 했을때, 이 한 과정을 위해서 같은 그림을 서로다른 크기로 9개 받아두면 너무 손해잖아! 그래서 시도안해봄. 어제 이것만 5시간 넘게 했는데 안되서 질문.
문라이브에 DrawStretchPicture인가 하는 게 있습니다.
철자는 정확하지 않으나 Stretch로 찾아보시면 있을 듯.