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

天行健 君子當自強而不息

玩家和角色控制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 閱讀(764) 評論(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>
            美日韩丰满少妇在线观看| 国产一区二区三区在线观看精品 | 在线亚洲欧美专区二区| 欧美a级片网| 亚洲特级毛片| 午夜精品视频在线观看一区二区| 亚洲免费在线观看视频| 欧美在线亚洲一区| 免费在线欧美黄色| 国产日产亚洲精品系列| 久久久久九九九| 免费成人性网站| 欧美精品一区在线| 国产精品亚洲人在线观看| 黄色精品在线看| 一本色道久久加勒比88综合| 亚洲欧美日韩成人| 欧美aaaaaaaa牛牛影院| 中文日韩在线视频| 久久久人人人| 国产精品久久久| 亚洲国产成人91精品| 亚洲一区二区三区四区在线观看| 久久久久久亚洲精品杨幂换脸 | 99国产精品自拍| 性8sex亚洲区入口| 欧美激情亚洲激情| 午夜欧美精品久久久久久久| 欧美高清视频一二三区| 国产欧美日韩伦理| 一本久久知道综合久久| 久久影院午夜片一区| 这里只有精品丝袜| 欧美啪啪一区| 亚洲国产精品第一区二区| 翔田千里一区二区| 日韩视频在线一区二区| 玖玖玖国产精品| 国产三级欧美三级| 亚洲视频第一页| 亚洲国产精品一区二区第四页av | 欧美高清成人| 在线观看成人av电影| 久久av一区二区三区亚洲| av成人天堂| 欧美欧美午夜aⅴ在线观看| 在线看日韩欧美| 久久婷婷蜜乳一本欲蜜臀| 亚洲欧美日韩国产| 国产精品性做久久久久久| 国产精品99久久不卡二区| 欧美激情一区二区三区成人| 久久夜色精品国产亚洲aⅴ| 国产一区二区三区久久| 欧美一区二区视频在线观看| 亚洲一区二区三区成人在线视频精品| 欧美精品网站| 一本一本大道香蕉久在线精品| 欧美va亚洲va香蕉在线| 玖玖玖免费嫩草在线影院一区| 亚洲第一视频| 欧美大片在线观看| 一本久道久久综合中文字幕| **欧美日韩vr在线| 玖玖视频精品| 噜噜噜91成人网| 亚洲精品美女久久久久| 亚洲人成网站在线观看播放| 欧美日韩国产区| 销魂美女一区二区三区视频在线| 亚洲尤物视频网| 国产一区在线免费观看| 欧美成人蜜桃| 欧美日韩国产一区二区三区地区| 一区二区三区视频观看| 亚洲影院色在线观看免费| 国产欧美日韩亚洲| 免费看精品久久片| 欧美日韩国产bt| 久久国产黑丝| 欧美成人首页| 午夜在线视频一区二区区别| 欧美专区日韩视频| 日韩网站免费观看| 亚洲欧美文学| 亚洲国产精品精华液网站| 亚洲日本va午夜在线电影| 国产精品国产三级国产普通话蜜臀| 小辣椒精品导航| 男人的天堂亚洲| 亚洲欧美一区二区视频| 久久精品视频免费播放| 亚洲视频自拍偷拍| 久久精彩视频| 亚洲一区二区三区视频播放| 久久久久九九九九| 亚洲综合导航| 欧美成年人视频| 欧美在线观看视频在线| 欧美成人嫩草网站| 久久亚洲电影| 国产精品久久综合| 欧美激情精品久久久久久久变态 | 夜夜爽99久久国产综合精品女不卡| 亚洲在线第一页| 日韩视频在线播放| 亚洲欧美一区二区视频| 一本大道久久a久久精品综合 | 国产精品视频一二| 亚洲国产片色| 尤物yw午夜国产精品视频明星| 99热这里只有精品8| 亚洲经典在线| 久久久噜噜噜久久中文字幕色伊伊 | 中文亚洲字幕| 欧美成人高清视频| 麻豆精品91| 国产亚洲一区二区精品| 亚洲午夜国产成人av电影男同| 亚洲男人的天堂在线| 美女精品在线| 久久精品国产77777蜜臀| 欧美色大人视频| 91久久嫩草影院一区二区| 国产字幕视频一区二区| 亚洲影院色在线观看免费| 一区二区成人精品 | 一区二区三区日韩| 欧美第一黄色网| 亚洲高清资源| 亚洲国产一区二区三区高清| 久久天天躁狠狠躁夜夜爽蜜月| 久久激情视频| 国产一区二区无遮挡| 亚洲欧美在线网| 久久精品国产69国产精品亚洲 | 9i看片成人免费高清| 亚洲毛片av在线| 欧美二区不卡| 亚洲三级色网| 99精品国产在热久久下载| 欧美黄免费看| 一本久道久久综合婷婷鲸鱼| 国产精品99久久不卡二区 | 在线欧美小视频| 美女久久网站| 亚洲精品综合精品自拍| 亚洲香蕉成视频在线观看| 国产精品videosex极品| 一区二区三区国产盗摄| 亚洲欧美日韩国产成人精品影院| 国产精品二区三区四区| 午夜一区在线| 欧美夫妇交换俱乐部在线观看| 亚洲人午夜精品| 欧美日韩一区二区三区在线| 亚洲一区二区少妇| 美女精品自拍一二三四| 亚洲精品乱码久久久久久| 欧美日韩久久久久久| 亚洲永久精品大片| 欧美成人高清视频| 亚洲在线观看视频| 狠狠色丁香婷婷综合久久片| 欧美福利精品| 亚洲欧美激情在线视频| 免费黄网站欧美| 亚洲少妇中出一区| 国语精品中文字幕| 欧美精品成人| 午夜亚洲视频| 亚洲乱码日产精品bd| 久久久久久久精| 在线一区二区视频| 极品少妇一区二区| 欧美日韩亚洲综合一区| 久久精品亚洲| 一区二区三区av| 欧美va天堂| 久久本道综合色狠狠五月| 亚洲三级免费电影| 国产亚洲成av人在线观看导航| 欧美电影免费观看高清完整版| 午夜精品视频网站| 亚洲欧洲在线一区| 国产视频在线观看一区| 欧美日韩免费在线视频| 久久影院午夜论| 欧美一区二区三区免费在线看 | 尤物视频一区二区| 国产精品激情偷乱一区二区∴| 免费亚洲一区| 久久欧美中文字幕| 欧美一级视频免费在线观看| 夜夜精品视频一区二区| 欧美激情无毛| 欧美顶级大胆免费视频| 久久久久久网址| 久久大香伊蕉在人线观看热2| 夜夜夜精品看看|