📄 nfs.c
字号:
//******************************************************
//*Copyright(C)2004-8,NOTHEOREM(R).All rights reserved.*
//******************************************************
//NT3D v1.2
#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEShell.h"
#include "AEESprite.h"
#include "AEEStdLib.h"
#include "NFS.bid"
#define USE_TRANSFORMS
#define UNITS (60)//总共60片贴图完成模型
/*Image
a_______b
| |
| |
|_____|
c d */
//记录每小片贴图abc三点空间位置[(Xa,Ya,Za),(Xb,Yb,Zb),(Xc,Yc,Zc),材质图片ID]=[10]
//由于是正方形,d点可以用abc算得
static const short D3dPos[UNITS][10]={
//后脸
-22,52,313,-67,52,308,-22,10,313,27,
22,52,313,-22,52,313,22,10,313,26,
22,52,313,67,52,308,22,10,313,27,
//后盖
-67,52,313,0,52,313,-67,52,269,19,
67,52,313,0,52,313,67,52,269,19,
//左后盖头
67,52,269,57,52,269,67,52,191,20,
//右后盖头
-67,52,269,-57,52,269,-67,52,191,20,
//左尾
67,52,231,67,52,272,67,29,231,36,
67,52,272,67,52,309,67,10,272,37,
//右尾
-67,52,231,-67,52,272,-67,29,231,36,
-67,52,272,-67,52,309,-67,10,272,37,
//左后轮
65,35,224,65,35,275,65,-16,224,39,
//右后轮
-65,35,224,-65,35,275,-65,-16,224,39,
//压风板
-67,76,324,-23,76,324,-67,66,277,21,
-23,76,324,23,76,324,-23,66,277,22,
23,76,324,67,76,324,23,66,277,23,
//左尾支架
67,81,277,67,81,317,67,52,277,38,
//右尾支架
-67,81,277,-67,81,317,-67,52,277,38,
//后窗
-57,52,269,0,52,269,-57,85,216,17,
0,52,269,57,52,269,0,85,216,18,
//顶
-41,85,216,0,85,216,-41,85,178,13,
-41,85,178,0,85,178,-41,85,140,14,
0,85,216,41,85,216,0,85,178,15,
0,85,178,41,85,178,0,85,140,16,
//左门后
57,52,191,67,52,231,57,0,191,35,
//右门后
-57,52,191,-67,52,231,-57,0,191,35,
//左侧窗
41,85,100,41,85,157,57,52,100,28,
41,85,157,41,85,213,57,52,157,29,
41,85,213,41,85,269,57,52,213,30,
//右侧窗
-41,85,100,-41,85,157,-57,52,100,28,
-41,85,157,-41,85,213,-57,52,157,29,
-41,85,213,-41,85,269,-57,52,213,30,
//左门
57,52,99,57,52,145,57,0,99,33,
57,52,145,57,52,191,57,0,145,34,
//右门
-57,52,99,-57,52,145,-57,0,99,33,
-57,52,145,-57,52,191,-57,0,145,34,
//前窗
-57,85,140,-18,85,140,-57,52,100,10,
-19,85,140,19,85,140,-19,52,100,11,
18,85,140,57,85,140,18,52,100,12,
//左门前
67,53,72,57,53,100,67,0,72,32,
//右门前
-67,53,72,-57,53,100,-67,0,72,32,
//左前轮
65,35,29,65,35,80,65,-16,29,39,
//右前轮
-65,35,29,-65,35,80,-65,-16,29,39,
//左翅
67,49,23,67,49,72,67,0,23,31,
//右翅
-67,49,23,-67,49,72,-67,0,23,31,
//发动机盖
//0
-67,52,100,-33,52,100,-67,49,66,0,
-33,52,100,0,52,100,-33,49,66,1,
33,52,100,0,52,100,33,49,66,1,
33,52,100,67,52,100,33,49,66,2,
//1
-67,49,66,-33,49,66,-67,45,33,6,
-33,49,66,0,49,66,-33,49,33,5,
0,49,66,33,49,66,0,49,33,4,
33,49,66,67,49,66,33,45,33,3,
//2
-67,45,33,-33,45,33,-67,40,0,7,
-33,49,33,0,49,33,-33,40,0,8,
0,49,33,33,49,33,0,40,0,9,
67,45,33,33,45,33,67,40,0,7,
//左灯
25,44,1,67,44,23,25,0,1,25,
//右灯
-25,44,1,-67,44,23,-25,0,1,25,
//前脸
-25,40,1,25,40,1,-25,0,1,24,
};
//按键标志位定义
#define KEY_LEFT (1)
#define KEY_RIGHT (2)
#define KEY_UP (4)
#define KEY_DOWN (8)
#define KEY_HIGH (16)
#define KEY_LOW (32)
//程序结构体
typedef struct
{
AEEApplet a;
ISprite *pISprite;
AEESpriteCmd pCmds[3];
AEETransformMatrix pTransform[2];
byte hW,hH,Key,units,flag[UNITS];
short userPos[3],bufPos[UNITS][9],order[UNITS],
frames,clocksec,clockmin,angle,sin,cos;
uint16 distance[UNITS];
AECHAR fps[9],sysclock[9],buf[16],inf[8];
} Data;
//函数声明
static boolean NFS_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam);
static void NFS_Init(Data *pMe);
static int NFS_LoadResources(Data *pMe);
static void NFS_UnloadResources(Data *pMe);
static void NFS_Display(Data *pMe);
static void NFS_Circu(Data *pMe);
static void NFS_KeyEvent(Data *pMe);
static void NFS_Help(Data *pMe);
//自定义三角函数
#ifdef USE_TRANSFORMS
static short Sin(Data *pMe);
static short Cos(Data *pMe);
#endif
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
*ppObj = NULL;
if(ClsId == AEECLSID_NFS){
if(AEEApplet_New(sizeof(Data), ClsId, pIShell,po,(IApplet**)ppObj,
(AEEHANDLER)NFS_HandleEvent,(PFNFREEAPPDATA)NFS_UnloadResources)
== TRUE)
{
return (AEE_SUCCESS);
}
}
return (EFAILED);
}
static boolean NFS_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
Data* pMe=(Data*)pi;
switch (eCode)
{
case EVT_APP_START:
NFS_Init(pMe);
if (NFS_LoadResources(pMe) != SUCCESS) return FALSE;//加载并处理图片
NFS_Display(pMe);//不断刷新显示
NFS_Circu(pMe);//自动旋转
NFS_KeyEvent(pMe);//完成按键连击事件
NFS_Help(pMe);//显示系统clock&fps
return TRUE;
case EVT_KEY:
switch (wParam)
{
case AVK_LEFT:
case AVK_4:
pMe->Key |= KEY_LEFT;
return(TRUE);
case AVK_RIGHT:
case AVK_6:
pMe->Key |= KEY_RIGHT;
return(TRUE);
case AVK_UP:
case AVK_8:
pMe->Key |= KEY_UP;
return(TRUE);
case AVK_DOWN:
case AVK_2:
pMe->Key |= KEY_DOWN;
return(TRUE);
case AVK_3:
pMe->Key |= KEY_HIGH;
return(TRUE);
case AVK_1:
pMe->Key |= KEY_LOW;
return(TRUE);
}
return FALSE;
case EVT_KEY_RELEASE:
switch (wParam)
{
case AVK_LEFT:
case AVK_4:
pMe->Key &= ~KEY_LEFT;
return(TRUE);
case AVK_RIGHT:
case AVK_6:
pMe->Key &= ~KEY_RIGHT;
return(TRUE);
case AVK_UP:
case AVK_8:
pMe->Key &= ~KEY_UP;
return(TRUE);
case AVK_DOWN:
case AVK_2:
pMe->Key &= ~KEY_DOWN;
return(TRUE);
case AVK_3:
pMe->Key &= ~KEY_HIGH;
return(TRUE);
case AVK_1:
pMe->Key &= ~KEY_LOW;
return(TRUE);
}
return FALSE;
case EVT_APP_NO_SLEEP:
return TRUE;
case EVT_APP_STOP:
NFS_UnloadResources(pMe);
return TRUE;
default:
break;
}
return FALSE;
}
//=====================================================
//NFS_Init
//=====================================================
static void NFS_Init(Data *pMe)
{
AEEDeviceInfo di;
int i;
//user位置初始化
pMe->userPos[0]=0;pMe->userPos[1]=90;pMe->userPos[2]=-220;
//获取设备尺寸
ISHELL_GetDeviceInfo(pMe->a.m_pIShell, &di);
pMe->hW = di.cxScreen >> 1; pMe->hH = di.cyScreen >> 1;
//每次draw 2个sprite的命令数组初始化
for(i=0;i<2;i++)
{
pMe->pCmds[i].unTransform = SPRITE_MATRIX_TRANSFORM;
pMe->pCmds[i].unMatrixTransform = i;
pMe->pCmds[i].unSpriteSize = SPRITE_SIZE_32X32;
pMe->pCmds[i].unComposite = 0;
pMe->pCmds[i].unLayer = 0;
}
pMe->pCmds[2].unSpriteSize = SPRITE_SIZE_END;//sptite结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -