📄 mytile.c
字号:
}
return FALSE;
}
// this function is called when your application is starting up
boolean mytile_InitAppData(mytile* pMe)
{
// Get the device information for this handset.
// Reference all the data by looking at the pMe->DeviceInfo structure
// Check the API reference guide for all the handy device info you can get
pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);
// The display and shell interfaces are always created by
// default, so we'll asign them so that you can access
// them via the standard "pMe->" without the "a."
pMe->pIDisplay = pMe->a.m_pIDisplay;
pMe->pIShell = pMe->a.m_pIShell;
// Insert your code here for initializing or allocating resources...
// if there have been no failures up to this point then return success
return TRUE;
}
// this function is called when your application is exiting
void mytile_FreeAppData(mytile* pMe)
{
// insert your code here for freeing any resources you have allocated...
// example to use for releasing each interface:
if ( pMe->pISprite != NULL ) // check for NULL first
{
ISPRITE_Release(pMe->pISprite); // release the interface
pMe->pISprite = NULL; // set to NULL so no problems trying to free later
}
//
}
//=========创建ISprite接口=======================================
static int Load_Sprite(mytile* pMe)
{
IBitmap *pbmpScreen;
//creates instance of ISprite
ISHELL_CreateInstance(pMe->pIShell, AEECLSID_SPRITE, (void**)&pMe->pISprite);
//sets IDisplay as its destination
pbmpScreen = IDISPLAY_GetDestination(pMe->pIDisplay);
ISPRITE_SetDestination(pMe->pISprite, pbmpScreen);
IBITMAP_Release(pbmpScreen);
//load image for tile
Load_Bmp_Res(pMe, "mytile5.bmp", TILE_SIZE_16X16, TRUE);
// Load_Bmp_Res(pMe, "mytile3.bmp", TILE_SIZE_16X16, TRUE);
//load image for sprite
Load_Bmp_Res(pMe, "ball32.bmp", SPRITE_SIZE_32X32, FALSE);
return SUCCESS;
}
//=========装入Tile/Sprite资源图片===============================================
static void Load_Bmp_Res(mytile* pMe, const char * pszFile, uint8 unSpriteSize, boolean isTile)
{
IBitmap *pbmScreen = NULL;
IBitmap *pbmDib = NULL;
IBitmap *pbmDdb = NULL;
NativeColor color;
AEEBitmapInfo bi;
pbmScreen = IDISPLAY_GetDestination(pMe->pIDisplay);
pbmDib = ISHELL_LoadBitmap(pMe->pIShell, pszFile);
IBITMAP_GetInfo(pbmDib, &bi, sizeof(bi));
IBITMAP_CreateCompatibleBitmap(pbmScreen, &pbmDdb, (uint16)bi.cx, (uint16)bi.cy);
IBITMAP_BltIn(pbmDdb, 0, 0, (uint16)bi.cx, (uint16)bi.cy, pbmDib, 0, 0, AEE_RO_COPY);
IBITMAP_Release(pbmDib);
IBITMAP_GetPixel(pbmDdb, 0, 0, &color);
IBITMAP_SetTransparencyColor(pbmDdb, color);
if (isTile == TRUE) {
ISPRITE_SetTileBuffer(pMe->pISprite, unSpriteSize, pbmDdb);
} else {
ISPRITE_SetSpriteBuffer(pMe->pISprite, unSpriteSize, pbmDdb);
}
IBITMAP_Release(pbmDdb);
IBITMAP_Release(pbmScreen);
}
//=======对sprite和tile的数据进行初始化========================
static void sprite_Init(mytile* pMe)
{
//tile索引数组
// MEMSET(pMe->BackGroundLayer,TILE_TRANSPARENT|0x0000,sizeof(pMe->BackGroundLayer));
pMe->BackGroundLayer[0] = TILE_TRANSPARENT|0;
pMe->BackGroundLayer[1] = TILE_TRANSPARENT|1;
pMe->BackGroundLayer[2] = TILE_TRANSPARENT|2;
pMe->BackGroundLayer[3] = TILE_TRANSPARENT|3;
pMe->BackGroundLayer[4] = TILE_TRANSPARENT|4;
pMe->BackGroundLayer[5] = TILE_TRANSPARENT|5;
pMe->BackGroundLayer[6] = TILE_TRANSPARENT|6;
pMe->BackGroundLayer[7] = TILE_TRANSPARENT|7;
pMe->BackGroundLayer[8] = TILE_TRANSPARENT|8;
pMe->BackGroundLayer[9] = TILE_TRANSPARENT|9;
pMe->BackGroundLayer[10] = TILE_TRANSPARENT|10;
pMe->BackGroundLayer[11] = TILE_TRANSPARENT|11;
pMe->BackGroundLayer[12] = TILE_TRANSPARENT|12;
pMe->BackGroundLayer[13] = TILE_TRANSPARENT|13;
pMe->BackGroundLayer[14] = TILE_TRANSPARENT|14;
pMe->BackGroundLayer[15] = TILE_TRANSPARENT|15;
pMe->BackGroundLayer1[0] = 16;
pMe->BackGroundLayer1[1] = 16;
pMe->BackGroundLayer1[2] = 16;
pMe->BackGroundLayer1[3] = 16;
pMe->BackGroundLayer1[4] = 16;
pMe->BackGroundLayer1[5] = 16;
pMe->BackGroundLayer1[6] = 16;
pMe->BackGroundLayer1[7] = 16;
pMe->BackGroundLayer1[8] = 16;
pMe->BackGroundLayer1[9] = 16;
pMe->BackGroundLayer1[10] =16;
pMe->BackGroundLayer1[11] =16;
pMe->BackGroundLayer1[12] =16;
pMe->BackGroundLayer1[13] = 16;
pMe->BackGroundLayer1[14] = 16;
pMe->BackGroundLayer1[15] = 16;
MEMSET(pMe->BackGroundLayer1,16,sizeof(pMe->BackGroundLayer1));
//tile
MEMSET(pMe->rgMaps, 0, sizeof(pMe->rgMaps));
pMe->rgMaps[0].pMapArray = (uint16*) pMe->BackGroundLayer1;
pMe->rgMaps[0].x = 0;
pMe->rgMaps[0].y = 0;
pMe->rgMaps[0].w = MAP_SIZE_16;
pMe->rgMaps[0].h = MAP_SIZE_1;
pMe->rgMaps[0].unTileSize = TILE_SIZE_16X16;
pMe->rgMaps[0].unFlags = MAP_FLAG_WRAP;
pMe->rgMaps[1].pMapArray = (uint16*) pMe->BackGroundLayer;
pMe->rgMaps[1].x = -32;
pMe->rgMaps[1].y = 0;
pMe->rgMaps[1].w = MAP_SIZE_16;
pMe->rgMaps[1].h = MAP_SIZE_1;
pMe->rgMaps[1].unTileSize = TILE_SIZE_16X16;
pMe->rgMaps[1].unFlags = MAP_FLAG_WRAP;
//----sprite---------------------------------
MEMSET(pMe->SpriteCmd,0, sizeof(pMe->SpriteCmd));
pMe->SpriteCmd[BLUEBALL].x = 0;
pMe->SpriteCmd[BLUEBALL].y = 0;
pMe->SpriteCmd[BLUEBALL].unSpriteIndex = 0;
pMe->SpriteCmd[BLUEBALL].unSpriteSize = SPRITE_SIZE_32X32;
pMe->SpriteCmd[BLUEBALL].unComposite = 0;
pMe->SpriteCmd[BLUEBALL].unLayer = 0;
pMe->SpriteCmd[REDBALL].x = 96;
pMe->SpriteCmd[REDBALL].y = 0;
pMe->SpriteCmd[REDBALL].unSpriteIndex = 1;
pMe->SpriteCmd[REDBALL].unSpriteSize = SPRITE_SIZE_32X32;
pMe->SpriteCmd[REDBALL].unComposite = 0;
pMe->SpriteCmd[REDBALL].unLayer = 1;
//terminator
pMe->SpriteCmd[2].unSpriteSize = SPRITE_SIZE_END;
pMe->Blue_dx = 2;
pMe->Blue_dy = 2;
pMe->Red_dx = -3;
pMe->Red_dy = 3;
CALLBACK_Init(&pMe->cbTimer, NextFrame_red, pMe);
CALLBACK_Init(&pMe->cbTimer1, NextFrame_blue, pMe);
ISPRITE_DrawTiles(pMe->pISprite, pMe->rgMaps);
ISPRITE_DrawSprites(pMe->pISprite, pMe->SpriteCmd);
IDISPLAY_Update(pMe->pIDisplay);
}
static void NextFrame_blue(mytile *pMe)
{
ISHELL_SetTimerEx(pMe->pIShell, 1000, &pMe->cbTimer1);
pMe->SpriteCmd[BLUEBALL].x = pMe->SpriteCmd[BLUEBALL].x + pMe->Blue_dx;
pMe->SpriteCmd[BLUEBALL].y = pMe->SpriteCmd[BLUEBALL].y + pMe->Blue_dy;
if(pMe->SpriteCmd[BLUEBALL].x >= pMe->DeviceInfo.cxScreen-32)
{
pMe->Blue_dx = -pMe->Blue_dx;
}
if(pMe->SpriteCmd[BLUEBALL].x <= 0 )
{
pMe->Blue_dx = -pMe->Blue_dx;
}
if(pMe->SpriteCmd[BLUEBALL].y >= pMe->DeviceInfo.cyScreen-32)
{
pMe->Blue_dy = -pMe->Blue_dy;
}
if(pMe->SpriteCmd[BLUEBALL].y <= 0 )
{
pMe->Blue_dy = -pMe->Blue_dy;
}
ISPRITE_DrawTiles(pMe->pISprite, pMe->rgMaps);
ISPRITE_DrawSprites(pMe->pISprite, pMe->SpriteCmd);
IDISPLAY_Update(pMe->pIDisplay);
}
static void NextFrame_red(mytile *pMe)
{
ISHELL_SetTimerEx(pMe->pIShell, 80, &pMe->cbTimer);
pMe->SpriteCmd[REDBALL].x = pMe->SpriteCmd[REDBALL].x + pMe->Red_dx;
pMe->SpriteCmd[REDBALL].y = pMe->SpriteCmd[REDBALL].y + pMe->Red_dy;
if(pMe->SpriteCmd[REDBALL].x >= pMe->DeviceInfo.cxScreen-32)
{
pMe->Red_dx = -pMe->Red_dx;
}
if(pMe->SpriteCmd[REDBALL].x <= 0 )
{
pMe->Red_dx = -pMe->Red_dx;
}
if(pMe->SpriteCmd[REDBALL].y >= pMe->DeviceInfo.cyScreen-32)
{
pMe->Red_dy = -pMe->Red_dy;
}
if(pMe->SpriteCmd[REDBALL].y <= 0 )
{
pMe->Red_dy = -pMe->Red_dy;
}
ISPRITE_DrawTiles(pMe->pISprite, pMe->rgMaps);
ISPRITE_DrawSprites(pMe->pISprite, pMe->SpriteCmd);
IDISPLAY_Update(pMe->pIDisplay);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -