游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1615|回复: 2

求助!!求助!! 用for循环把顶点移动后 “弹出遇到问题要关

[复制链接]

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2008-10-22 12:26:00 | 显示全部楼层 |阅读模式
前天做了个 vc++6.0、dx9.0 中sdk的例子“Tut02_Vertices”
把它修改成6个点图源,想移动下。
弹出窗口“MovePoint.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。”
错误签名:“AppName: movepoint.exe     AppVer: 0.0.0.0  ModName: movepoint.exe     
ModVer: 0.0.0.0  Offset: 0000f39a”

麻烦各位了,我添加代码如下:
HRESULT InitVB()
{
    CUSTOMVERTEX vertices[] =
    {
            {150.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(255,0,0)}, //point 1
{250.0f,150.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,255,0)}, //point 2
{350.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,0,255)}, //point 3
{450.0f,150.0f,0.5f,1.0f,D3DCOLOR_XRGB(255,0,0)}, //point 4
{550.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,255,0)}, //point 5
{650.0f,150.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,0,255)}, //point 6

    };
    CUSTOMVERTEX *pv = (CUSTOMVERTEX *) data;
for(int i=0;i<6;++i)
{
pv.x += 0.1;
if(pv.x>800) pv.x -= 800;
break;
  }
        if( FAILED( g_pd3dDevice->CreateVertexBuffer( 6*sizeof(CUSTOMVERTEX),
                                                  0, D3DFVF_CUSTOMVERTEX,
                                                  D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
    {
        return E_FAIL;
    }

       VOID* pVertices;
    if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
        return E_FAIL;
    memcpy( pVertices, vertices, sizeof(vertices) );
    g_pVB->Unlock();

    return S_OK;
}

VOID Render()
{
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );

    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {      
        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
   
        g_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST,0,6);       // 画点 POINTLIST

        g_pd3dDevice->EndScene();
    }

    g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );
}   
[em24] [em24] [em24] [em24]

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2008-11-12 17:11:00 | 显示全部楼层

Re:求助!!求助!! 用for循环把顶点移动后 “弹出遇到问题要

代码可能太长了,也没人看~~
我自己试了下,在render中加入了以下代码:
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {     
         CUSTOMVERTEX *pv ;
         if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pv, 0 ) ) )
  //           return E_FAIL;
            memcpy( pv, vertices, sizeof(vertices) );
                 for(int i=0;i<6;++i)
                 {
                        pv.x += 0.5;
                         if(pv.x>800) pv.x -= 800;
                 }        
         g_pVB->Unlock();
   
        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
             
        g_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST,0,6);       // 画点 POINTLIST       

        // End the scene
        g_pd3dDevice->EndScene();
    }
可以实现在顶点缓存中移动顶点。
还有个问题:
  if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pv, 0 ) ) )
  //           return E_FAIL;
            memcpy( pv, vertices, sizeof(vertices) );
由于render函数是void类型的,所以不能用   return E_FAIL; 我就给注销了,
那就成了:
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pv, 0 ) ) )
            memcpy( pv, vertices, sizeof(vertices) );
            for(int i=0;i<6;++i)
         {
             。。。。。。
            }
是不是 如果 if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pv, 0 ) ) )成功
就直接执行for循环了,会不会跳过 memcpy( pv, vertices, sizeof(vertices) ); 呢??
虽然实现了功能,却有点糊涂了,那位高手能回答下,小弟万分感激。那位兄弟顶下,小弟万分感激。

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2008-11-13 00:11:00 | 显示全部楼层

Re:求助!!求助!! 用for循环把顶点移动后 “弹出遇到问题要

for(int i=0;i<6;++i)
{
pv.x += 0.1;
if(pv.x>800) pv.x -= 800;
break;
}

第一个循环就break了

if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pv, 0 ) ) ) 的话
得不到pv,就没有必要做下去了,所以原来直接return
void函数直接return,不加返回值就好了,你那样写就不合理了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 22:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表