FanLoveJX
13-09-12, 11:25 AM
Như đã hứa. hôm nay mình share code vòng sáng cho các bạn.
Demo:
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
Code:
[1] Khai báo các biến và các hàm
int m_color ;
int m_time ;
int n_mpoint;
int m_count[8];
unsigned int m_nColor;
int GetRectItem(int _w, int _h);
void DrawPoint(int x, int y, unsigned int wColor);
void DrawLight(int x, int y, int _w, int _h, int unit, int unitboder);
[2] Các hàm draw vòng sáng
int KWndObjectMatrix::GetRectItem(int _w, int _h)
{
int i;
if (_w == 1 && _h == 1) i = 0;
else if(_w == 1 && _h == 2) i = 1;
else if(_w == 1 && _h == 3) i = 2;
else if(_w == 1 && _h == 4) i = 3;
else if(_w == 1 && _h == 5) i = 4;
else if(_w == 2 && _h == 1) i = 5;
else if(_w == 2 && _h == 2) i = 6;
else if(_w == 2 && _h == 3) i = 7;
return i;
}
void KWndObjectMatrix::DrawPoint(int x, int y, unsigned int wColor)
{
KRUPoint Rect;
Rect.Color.Color_dw = wColor;
Rect.oPosition.nX = x;
Rect.oPosition.nY = y;
Rect.oPosition.nZ = 0;
g_pRepresentShell->DrawPrimitives(1, &Rect, RU_T_POINT, true);
}
void KWndObjectMatrix::DrawLight(int x, int y, int _w, int _h, int unit, int unitboder)
{
int r_color = 1; // 1::Yellow, 2::Purple, 3::White
x = x - 1;
y = y - 1;
int w = _w*unit - unitboder*2 + 1;
int h = _h*unit - unitboder*2 + 1;
int nX = x + w;
int nY = y + h;
int i = 0;
int j = 0;
int n_point = w + h;
int a[400];
int m_pb = 268/(w + h);
int color = 255;
for(i;i<2*n_point;i++)
{
if(color>=0)
{
a[i] = color;
color = color - m_pb;
}
else
{
a[i] = 0;
}
if(i==n_point)
color = 255;
}
i = m_count[GetRectItem( _w, _h)];
while (y < nY)
{
if(r_color == 1) // yellow
{
m_nColor = 0xFF000000 | a[i] << 16 | a[i] << 8 | 0;
}
else if(r_color == 2) //purple
{
m_nColor = 0xFF000000 | a[i] << 16 | 0 | a[i] << 0;
}
else if(r_color == 3) //white
{
m_nColor = 0xFF000000 | a[i] << 16 | a[i] << 8 | a[i] << 0;
}
this->DrawPoint(x+w,nY,m_nColor);
this->DrawPoint(x,y+j,m_nColor);
nY = nY - 1;
i++;
j++;
if(i == n_point) i=0;
if(m_count[GetRectItem( _w, _h)] >= n_point) m_count[GetRectItem( _w, _h)] = 0;
}
j=0;
i = m_count[GetRectItem( _w, _h)] + h;
while (x < nX)
{
if(r_color == 1) // yellow
{
m_nColor = 0xFF000000 | a[i] << 16 | a[i] << 8 | 0;
}
else if(r_color == 2) //purple
{
m_nColor = 0xFF000000 | a[i] << 16 | 0 | a[i] << 0;
}
else if(r_color == 3) //white
{
m_nColor = 0xFF000000 | a[i] << 16 | a[i] << 8 | a[i] << 0;
}
this->DrawPoint(nX,y,m_nColor);
this->DrawPoint(x + j,y+h,m_nColor);
nX = nX - 1;
i=i+1;
j=j+1;
if(i == n_point) i=0;
if(m_count[GetRectItem( _w, _h)] >= n_point) m_count[GetRectItem( _w, _h)] = 0;
}
}
[3] Cách sử dụng
void KWndObjectMatrix::PaintWindow()
{
++m_time;
if (m_time % 4 == 0)
{
for(int i =0;i<8;i++)
++m_count[i];
}
KWndWindow::PaintWindow();
KRUShadow Shadow;
for (int i = 0; i < m_nNumObjects; i++)
{
KUiDraggedObject* pObj = &m_pObjects[i];
Shadow.Color.Color_dw = 0;
if (i == REPLACE_ITEM_INDEX(m_nPutPosX))
Shadow.Color.Color_dw = l_BgColors[4];
else if ((m_Style & OBJCONT_F_MOUSE_HOVER) && m_nMouseOverObj == i)
Shadow.Color.Color_dw = l_BgColors[3];
else if (m_Style & OBJCONT_S_HAVEOBJBGCOLOR)
{
KUiObjAtContRegion Obj;
Obj.Obj.uGenre = pObj->uGenre;
Obj.Obj.uId = pObj->uId;
Obj.Region.h = Obj.Region.v = 0;
Obj.Region.Width = Obj.Region.Height = 0;
Obj.nContainer = m_nContainerId;
ITEM_IN_ENVIRO_PROP eProp = (ITEM_IN_ENVIRO_PROP)g_pCoreShell->
GetGameData(GDI_ITEM_IN_ENVIRO_PROP, (unsigned int)&Obj, 0);
if (eProp == IIEP_NORMAL)
Shadow.Color.Color_dw = l_BgColors[0];
else if (eProp == IIEP_NOT_USEABLE)
Shadow.Color.Color_dw = l_BgColors[1];
else if (eProp == IIEP_SPECIAL)
Shadow.Color.Color_dw = l_BgColors[2];
}
int width = m_nUnitWidth * pObj->DataW - m_nUnitBorder * 2;
int height = m_nUnitHeight * pObj->DataH - m_nUnitBorder * 2;
Shadow.oPosition.nX = m_nAbsoluteLeft + m_nUnitWidth * pObj->DataX + m_nUnitBorder;
Shadow.oPosition.nY = m_nAbsoluteTop + m_nUnitHeight * pObj->DataY + m_nUnitBorder;
if (Shadow.Color.Color_dw)
{
Shadow.oEndPos.nX = Shadow.oPosition.nX + width;
Shadow.oEndPos.nY = Shadow.oPosition.nY + height;
g_pRepresentShell->DrawPrimitives(1, &Shadow, RU_T_SHADOW, true);
}
g_pCoreShell->DrawGameObj(pObj->uGenre, pObj->uId, Shadow.oPosition.nX, Shadow.oPosition.nY, width, height, 0);
this->DrawLight(Shadow.oPosition.nX,Shadow.oPosition.nY, pObj->DataW, pObj->DataH , m_nUnitWidth, m_nUnitBorder);
}
if (m_nPutPosX >= 0)
{
Shadow.oPosition.nX = m_nAbsoluteLeft + m_nUnitWidth * m_nPutPosX + m_nUnitBorder;
Shadow.oPosition.nY = m_nAbsoluteTop + m_nUnitHeight * m_nPutPosY + m_nUnitBorder;
Shadow.oEndPos.nX = Shadow.oPosition.nX + m_nUnitWidth * m_nPutWidth - m_nUnitBorder * 2;
Shadow.oEndPos.nY = Shadow.oPosition.nY + m_nUnitHeight * m_nPutHeight - m_nUnitBorder * 2;
Shadow.Color.Color_dw = l_BgColors[4];
g_pRepresentShell->DrawPrimitives(1, &Shadow, RU_T_SHADOW, true);
}
}
[4] Gợi ý phân loại Item cho ai chưa bik làm
Down code item do trananh share, thả vào source. thêm và KItem.h hàm
int GetType() const { return m_CommonAttrib.m_nTypeItem; };
Vào CoreShell tìm và khai báo CoreShell.h
virtual int GetItemType(int nID) = 0;
thêm hàm vào CoreShell.cpp
int KCoreShell::GetItemType(int nID)
{
return Item[nID].GetType();
}
cách dùng tự hiểu nhé ^^
Mì ăn liền:
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
Ai ko làm đc thì múc file về máy sài. ko spam hỏi linh tinh.
Demo:
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
Code:
[1] Khai báo các biến và các hàm
int m_color ;
int m_time ;
int n_mpoint;
int m_count[8];
unsigned int m_nColor;
int GetRectItem(int _w, int _h);
void DrawPoint(int x, int y, unsigned int wColor);
void DrawLight(int x, int y, int _w, int _h, int unit, int unitboder);
[2] Các hàm draw vòng sáng
int KWndObjectMatrix::GetRectItem(int _w, int _h)
{
int i;
if (_w == 1 && _h == 1) i = 0;
else if(_w == 1 && _h == 2) i = 1;
else if(_w == 1 && _h == 3) i = 2;
else if(_w == 1 && _h == 4) i = 3;
else if(_w == 1 && _h == 5) i = 4;
else if(_w == 2 && _h == 1) i = 5;
else if(_w == 2 && _h == 2) i = 6;
else if(_w == 2 && _h == 3) i = 7;
return i;
}
void KWndObjectMatrix::DrawPoint(int x, int y, unsigned int wColor)
{
KRUPoint Rect;
Rect.Color.Color_dw = wColor;
Rect.oPosition.nX = x;
Rect.oPosition.nY = y;
Rect.oPosition.nZ = 0;
g_pRepresentShell->DrawPrimitives(1, &Rect, RU_T_POINT, true);
}
void KWndObjectMatrix::DrawLight(int x, int y, int _w, int _h, int unit, int unitboder)
{
int r_color = 1; // 1::Yellow, 2::Purple, 3::White
x = x - 1;
y = y - 1;
int w = _w*unit - unitboder*2 + 1;
int h = _h*unit - unitboder*2 + 1;
int nX = x + w;
int nY = y + h;
int i = 0;
int j = 0;
int n_point = w + h;
int a[400];
int m_pb = 268/(w + h);
int color = 255;
for(i;i<2*n_point;i++)
{
if(color>=0)
{
a[i] = color;
color = color - m_pb;
}
else
{
a[i] = 0;
}
if(i==n_point)
color = 255;
}
i = m_count[GetRectItem( _w, _h)];
while (y < nY)
{
if(r_color == 1) // yellow
{
m_nColor = 0xFF000000 | a[i] << 16 | a[i] << 8 | 0;
}
else if(r_color == 2) //purple
{
m_nColor = 0xFF000000 | a[i] << 16 | 0 | a[i] << 0;
}
else if(r_color == 3) //white
{
m_nColor = 0xFF000000 | a[i] << 16 | a[i] << 8 | a[i] << 0;
}
this->DrawPoint(x+w,nY,m_nColor);
this->DrawPoint(x,y+j,m_nColor);
nY = nY - 1;
i++;
j++;
if(i == n_point) i=0;
if(m_count[GetRectItem( _w, _h)] >= n_point) m_count[GetRectItem( _w, _h)] = 0;
}
j=0;
i = m_count[GetRectItem( _w, _h)] + h;
while (x < nX)
{
if(r_color == 1) // yellow
{
m_nColor = 0xFF000000 | a[i] << 16 | a[i] << 8 | 0;
}
else if(r_color == 2) //purple
{
m_nColor = 0xFF000000 | a[i] << 16 | 0 | a[i] << 0;
}
else if(r_color == 3) //white
{
m_nColor = 0xFF000000 | a[i] << 16 | a[i] << 8 | a[i] << 0;
}
this->DrawPoint(nX,y,m_nColor);
this->DrawPoint(x + j,y+h,m_nColor);
nX = nX - 1;
i=i+1;
j=j+1;
if(i == n_point) i=0;
if(m_count[GetRectItem( _w, _h)] >= n_point) m_count[GetRectItem( _w, _h)] = 0;
}
}
[3] Cách sử dụng
void KWndObjectMatrix::PaintWindow()
{
++m_time;
if (m_time % 4 == 0)
{
for(int i =0;i<8;i++)
++m_count[i];
}
KWndWindow::PaintWindow();
KRUShadow Shadow;
for (int i = 0; i < m_nNumObjects; i++)
{
KUiDraggedObject* pObj = &m_pObjects[i];
Shadow.Color.Color_dw = 0;
if (i == REPLACE_ITEM_INDEX(m_nPutPosX))
Shadow.Color.Color_dw = l_BgColors[4];
else if ((m_Style & OBJCONT_F_MOUSE_HOVER) && m_nMouseOverObj == i)
Shadow.Color.Color_dw = l_BgColors[3];
else if (m_Style & OBJCONT_S_HAVEOBJBGCOLOR)
{
KUiObjAtContRegion Obj;
Obj.Obj.uGenre = pObj->uGenre;
Obj.Obj.uId = pObj->uId;
Obj.Region.h = Obj.Region.v = 0;
Obj.Region.Width = Obj.Region.Height = 0;
Obj.nContainer = m_nContainerId;
ITEM_IN_ENVIRO_PROP eProp = (ITEM_IN_ENVIRO_PROP)g_pCoreShell->
GetGameData(GDI_ITEM_IN_ENVIRO_PROP, (unsigned int)&Obj, 0);
if (eProp == IIEP_NORMAL)
Shadow.Color.Color_dw = l_BgColors[0];
else if (eProp == IIEP_NOT_USEABLE)
Shadow.Color.Color_dw = l_BgColors[1];
else if (eProp == IIEP_SPECIAL)
Shadow.Color.Color_dw = l_BgColors[2];
}
int width = m_nUnitWidth * pObj->DataW - m_nUnitBorder * 2;
int height = m_nUnitHeight * pObj->DataH - m_nUnitBorder * 2;
Shadow.oPosition.nX = m_nAbsoluteLeft + m_nUnitWidth * pObj->DataX + m_nUnitBorder;
Shadow.oPosition.nY = m_nAbsoluteTop + m_nUnitHeight * pObj->DataY + m_nUnitBorder;
if (Shadow.Color.Color_dw)
{
Shadow.oEndPos.nX = Shadow.oPosition.nX + width;
Shadow.oEndPos.nY = Shadow.oPosition.nY + height;
g_pRepresentShell->DrawPrimitives(1, &Shadow, RU_T_SHADOW, true);
}
g_pCoreShell->DrawGameObj(pObj->uGenre, pObj->uId, Shadow.oPosition.nX, Shadow.oPosition.nY, width, height, 0);
this->DrawLight(Shadow.oPosition.nX,Shadow.oPosition.nY, pObj->DataW, pObj->DataH , m_nUnitWidth, m_nUnitBorder);
}
if (m_nPutPosX >= 0)
{
Shadow.oPosition.nX = m_nAbsoluteLeft + m_nUnitWidth * m_nPutPosX + m_nUnitBorder;
Shadow.oPosition.nY = m_nAbsoluteTop + m_nUnitHeight * m_nPutPosY + m_nUnitBorder;
Shadow.oEndPos.nX = Shadow.oPosition.nX + m_nUnitWidth * m_nPutWidth - m_nUnitBorder * 2;
Shadow.oEndPos.nY = Shadow.oPosition.nY + m_nUnitHeight * m_nPutHeight - m_nUnitBorder * 2;
Shadow.Color.Color_dw = l_BgColors[4];
g_pRepresentShell->DrawPrimitives(1, &Shadow, RU_T_SHADOW, true);
}
}
[4] Gợi ý phân loại Item cho ai chưa bik làm
Down code item do trananh share, thả vào source. thêm và KItem.h hàm
int GetType() const { return m_CommonAttrib.m_nTypeItem; };
Vào CoreShell tìm và khai báo CoreShell.h
virtual int GetItemType(int nID) = 0;
thêm hàm vào CoreShell.cpp
int KCoreShell::GetItemType(int nID)
{
return Item[nID].GetType();
}
cách dùng tự hiểu nhé ^^
Mì ăn liền:
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
Ai ko làm đc thì múc file về máy sài. ko spam hỏi linh tinh.