青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

玩家和角色控制DEMO平行鏡頭版

 

下載源碼和工程

 


修改的關鍵代碼以紅色標示:


/*
                                  0
                                  ^
                                   |
                                   |
                                   |  
4.71----------------------------------------> 1.57
                                   |
                                   |
                                   |
                                   |
                                3.14 
*/


const float g_angles[13] =
{
0.0f,
0.0f, 1.57f, 0.785f, 3.14f,
0.0f, 2.355f, 0.0f, 4.71f,
5.495f, 0.0f, 0.0f, 3.925f
};
 
 
void cGameCharController::pc_update(sCharacter* character, long elapsed,
                                    
float* x_move, float* y_move, float* z_move)
{
    
if(character->id != CHAR_PC)
        
return;

    
float speed = elapsed/500.0f * get_speed(character);
    
long m_action = m_app->get_input();        

    
cCamera* camera = m_app->get_camera();

    
static float move_angle = 0.0f;
    
    if
((m_action & PRESS_UP) || (m_action & PRESS_RIGHT) || (m_action & PRESS_DOWN) || (m_action & PRESS_LEFT))
    {
        move_angle = g_angles[m_action] + camera->m_y_rot;  
// key diretion + mouse direction

        *x_move = sin(move_angle) * speed;
        *z_move = cos(move_angle) * speed;

        character->direction = move_angle;
        character->action    = CHAR_MOVE;
    }        


    sCharacter* char_ptr;
    
float x_diff, y_diff, z_diff, dist;

    
// attack a nearby monster or process NPC script
    if(m_action & PRESS_SPACE)
    {
        
for(char_ptr = get_root_char(); char_ptr != NULL; char_ptr = char_ptr->next)
        {
            
// only check other characters
            if(char_ptr->id == character->id)
                
continue;
            
            x_diff = fabs(char_ptr->pos_x - character->pos_x);
            y_diff = fabs(char_ptr->pos_y - character->pos_y);
            z_diff = fabs(char_ptr->pos_z - character->pos_z);

            dist = x_diff * x_diff + y_diff * y_diff + z_diff * z_diff;

            
// only check characters within 1000.0 units distance
            if(dist > 10000.0f)
                
continue;
            
            
if(char_ptr->script_filename[0])
                m_app->m_game_script.execute(char_ptr->script_filename);
            
else
            {
                
// turn toward victim
                x_diff = char_ptr->pos_x - character->pos_x;
                z_diff = char_ptr->pos_z - character->pos_z;

                character->direction = atan2(x_diff, z_diff);

                character->victim  = char_ptr;
                char_ptr->attacker = character;

                m_app->m_gc_controller.set_char_action(character, CHAR_ATTACK, 0);
            }

            
break;
        }
    }

    
long spell_index = SPELL_FIRE;

    
// cast spells
    if(m_action & PRESS_1 || m_action & PRESS_2 || m_action & PRESS_3)
    {
        
// get spell index to cast
        if(m_action & PRESS_1)    spell_index = SPELL_FIRE;
        
if(m_action & PRESS_2)    spell_index = SPELL_GROUNDBALL;
        
if(m_action & PRESS_3)    spell_index = SPELL_ICE;

        
float spell_max_dist = m_app->m_spell_controller.get_spell(spell_index)->max_dist;

        
// search for closest monster
        for(char_ptr = get_root_char(); char_ptr != NULL; char_ptr = char_ptr->next)
        {
            
if(char_ptr->type == CHAR_MONSTER)
            {
                x_diff = fabs(char_ptr->pos_x - character->pos_x);
                y_diff = fabs(char_ptr->pos_y - character->pos_y);
                z_diff = fabs(char_ptr->pos_z - character->pos_z);

                dist = x_diff * x_diff + y_diff * y_diff + z_diff * z_diff;

                
if(dist <= (spell_max_dist * spell_max_dist))
                {
                    character->spell_index = spell_index;
                    character->target_type = CHAR_MONSTER;
                    character->target_x    = char_ptr->pos_x;
                    character->target_y    = char_ptr->pos_y;
                    character->target_z    = char_ptr->pos_z;

                    
// turn toward victim
                    x_diff = char_ptr->pos_x - character->pos_x;
                    z_diff = char_ptr->pos_z - character->pos_z;
                    character->direction = atan2(x_diff, z_diff);

                    m_app->m_gc_controller.set_char_action(character, CHAR_SPELL, 0);
                    
break;
                }
            }
        }
    }
}

 
bool cApp::frame()
{
    
static DWORD update_counter = timeGetTime();

    
// lock to 30fps
    if(timeGetTime() < update_counter + 33)
        
return true;

    DWORD elapsed = timeGetTime() - update_counter;

    update_counter = timeGetTime();

    m_keyboard.acquire();
    m_keyboard.read();
    m_mouse.read();

    
// exit if ESC pressed
    if(m_keyboard.get_key_state(KEY_ESC))
        
return false;

    m_gc_controller.update(33);
    m_spell_controller.update(33);

    
static sCharacter* character = m_gc_controller.get_char(CHAR_PC);

    
static float cam_angle = 0.0f;

    cam_angle -= ((float
)m_mouse.get_x_delta() * elapsed / 800.0f);

    m_camera.point(character->pos_x + cos(cam_angle) * 300.0f, 
                   character->pos_y + 100.0f, 
                   character->pos_z + sin(cam_angle) * 300.0f,
                   character->pos_x, 0.0f, character->pos_z);
    
    set_display_camera(&m_camera);

    
    clear_display(0, 1.0f);

    
if(begin_display_scene())
    {
        enable_zbuffer();

        m_terrain_object.render();
        m_gc_controller.render(-1, NULL, 0);
        m_spell_controller.render(NULL, 0);        

        
char stats[128];

        sprintf(stats, "HP: %ld / %ld\r\nMP: %ld / %ld",
                character->health_points, character->char_def.health_points,
                character->mana_points, character->char_def.mana_points);

        draw_font(m_font, stats, 2, 2, 0, 0, COLOR_WHITE, DT_LEFT);

        end_display_scene();
    }

    present_display();

    
return true;
}

posted on 2007-12-10 10:16 lovedday 閱讀(768) 評論(0)  編輯 收藏 引用 所屬分類: ■ RPG Program

公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲成色777777女色窝| 欧美成人精品一区| 欧美激情一区二区三区不卡| 欧美伊人久久久久久午夜久久久久 | 蜜臀av国产精品久久久久| 国产精品每日更新| 亚洲国产一区在线| 好看的亚洲午夜视频在线| 亚洲一区二区三区精品在线 | 日韩午夜黄色| 猫咪成人在线观看| 久久尤物视频| 极品少妇一区二区三区精品视频| 午夜在线视频一区二区区别| 亚洲自拍偷拍一区| 国产精品高潮久久| 夜色激情一区二区| 亚洲综合大片69999| 欧美天堂在线观看| 99热免费精品在线观看| 在线亚洲激情| 欧美三级午夜理伦三级中视频| 亚洲三级视频在线观看| 99视频有精品| 欧美日韩在线不卡| 亚洲视频1区| 欧美一区激情视频在线观看| 国产欧美日韩综合| 欧美一区二粉嫩精品国产一线天| 久久国产主播精品| 国产午夜亚洲精品羞羞网站| 久久激五月天综合精品| 免费日韩成人| 日韩写真在线| 欧美性大战久久久久久久| 亚洲最新合集| 久久成人综合视频| 亚洲国产经典视频| 欧美日韩一区成人| 亚洲欧美自拍偷拍| 欧美**人妖| 亚洲精品一区在线观看| 欧美日韩免费一区二区三区视频| 亚洲少妇自拍| 玖玖国产精品视频| 日韩亚洲精品电影| 国产欧美一级| 榴莲视频成人在线观看| 9l国产精品久久久久麻豆| 久久国产精品毛片| 亚洲日韩欧美一区二区在线| 欧美色视频日本高清在线观看| 亚洲欧美日韩在线播放| 欧美激情一区二区三区蜜桃视频 | 亚洲欧美日韩国产| 亚洲成人在线观看视频| 欧美日本精品一区二区三区| 亚洲一区激情| 亚洲国产高清在线| 欧美影院一区| 亚洲精品欧美激情| 国产一区二区三区精品久久久| 欧美成人中文| 香蕉视频成人在线观看| 亚洲美女少妇无套啪啪呻吟| 久久免费一区| 午夜日韩激情| 99成人精品| 精品动漫3d一区二区三区免费| 欧美视频免费看| 久久综合色婷婷| 亚洲欧美日韩在线综合| 亚洲人成在线影院| 麻豆91精品| 性欧美暴力猛交69hd| aⅴ色国产欧美| 亚洲大片免费看| 国产日韩欧美| 国产精品视频观看| 欧美日韩一区二区在线播放| 久久综合给合久久狠狠狠97色69| 亚洲欧美精品在线观看| 亚洲美女中出| 91久久久久久久久久久久久| 裸体一区二区| 久久久人成影片一区二区三区 | 欧美韩日视频| 久久婷婷国产麻豆91天堂| 亚洲欧美伊人| 亚洲一区二区在线| 亚洲视频在线观看视频| 亚洲日本中文字幕免费在线不卡| 黄色成人小视频| 国产伊人精品| 国产日产欧美a一级在线| 国产精品久久久久久久久动漫| 欧美精品一区二区三区在线播放 | 亚洲欧洲精品一区二区| 禁断一区二区三区在线| 国际精品欧美精品 | 国产九色精品成人porny| 欧美日韩在线免费视频| 欧美日本国产一区| 欧美日韩hd| 欧美日韩综合视频网址| 欧美天天视频| 国产精品久久久久毛片软件| 欧美午夜欧美| 国产精品狼人久久影院观看方式| 欧美午夜电影在线观看| 欧美另类在线播放| 欧美日韩亚洲免费| 国产精品久久毛片a| 国产人妖伪娘一区91| 国产亚洲精品久久飘花| 一区二区亚洲| 亚洲激情成人网| 中国av一区| 亚欧成人在线| 久久婷婷成人综合色| 欧美mv日韩mv亚洲| 亚洲国产日韩欧美在线图片| 日韩午夜激情| 香蕉亚洲视频| 欧美xart系列高清| 国产精品扒开腿做爽爽爽软件| 国产精品久久看| 极品少妇一区二区三区精品视频 | 亚洲人成网站在线观看播放| 在线视频你懂得一区| 亚洲专区欧美专区| 久久久另类综合| 亚洲成人在线网站| 一区二区三区色| 久久精品国产一区二区三区| 欧美暴力喷水在线| 国产精品久久婷婷六月丁香| 一区二区三区中文在线观看 | 亚洲国产精品v| 亚洲天堂免费观看| 久热爱精品视频线路一| 亚洲日本激情| 久久精品国产综合| 欧美日韩免费观看一区二区三区| 国产日韩欧美在线| 亚洲免费福利视频| 久久久精品欧美丰满| 亚洲巨乳在线| 老司机精品导航| 国产精品私房写真福利视频| 亚洲黄色有码视频| 久久久精品日韩欧美| 99热在这里有精品免费| 久久久久久国产精品mv| 国产精品超碰97尤物18| 在线色欧美三级视频| 欧美一区成人| 亚洲巨乳在线| 久久资源av| 国内精品久久久久久影视8| 一区二区不卡在线视频 午夜欧美不卡在| 欧美一区国产在线| 99re66热这里只有精品4| 免费久久久一本精品久久区| 国产毛片久久| 亚洲欧美中文另类| 亚洲精品一区二区在线| 久久这里有精品视频| 国产久一道中文一区| 亚洲永久字幕| 亚洲精品久久久久久下一站 | 亚洲视频中文| 亚洲国产精品久久久久婷婷老年| 欧美一区二区三区喷汁尤物| 国产精品成人免费| 夜夜嗨av色一区二区不卡| 欧美福利小视频| 久久激五月天综合精品| 国产午夜精品麻豆| 亚洲欧美国产高清| 日韩亚洲视频在线| 欧美日韩一区二区在线播放| 日韩午夜一区| 亚洲激情一区| 欧美精品97| 一区二区三区视频在线| 亚洲精品在线观看免费| 欧美久久成人| 亚洲素人一区二区| 亚洲免费精品| 欧美婷婷在线| 午夜欧美大片免费观看| 亚洲欧美日韩人成在线播放| 国产精品视频导航| 久久国产精品久久国产精品| 久久av一区二区三区漫画| 狠狠色噜噜狠狠色综合久| 麻豆成人av| 欧美www视频在线观看| 99国产精品久久久|