⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytile.c

📁 brew 的编程实例啊
💻 C
📖 第 1 页 / 共 2 页
字号:
   }

   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 + -