游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1849|回复: 5

Ddraw游戏菜鸟群:67190884 欢迎大家进入,具体介绍请进

[复制链接]

4

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2008-9-14 22:18:00 | 显示全部楼层 |阅读模式
QQ群号:67190884
本群以菜鸟为主,主要以2D DDRAW编程为主,讨论主题从[游戏的初步策划]--[游戏的具体策划]--[具体编写程序]为主。因为以菜鸟为主,所以探讨的问题比较浅,但也比较实在,希望大家一起加入来学习如何制作游戏。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-9-15 11:27:00 | 显示全部楼层

Re:Ddraw游戏菜鸟群:67190884 欢迎大家进入,具体介绍请进

建议去 cpp.instemast.com 下载封装好了的类库使用

4

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2008-9-18 13:12:00 | 显示全部楼层

Re:Ddraw游戏菜鸟群:67190884 欢迎大家进入,具体介绍请进

恩 谢谢你的建议

4

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2008-9-18 13:13:00 | 显示全部楼层

Re:Ddraw游戏菜鸟群:67190884 欢迎大家进入,具体介绍请进

能具体介绍下你说的引擎嘛

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-9-19 19:21:00 | 显示全部楼层

Re: Ddraw游戏菜鸟群:67190884 欢迎大家进入,具体介绍请进

#include <instGameWnd.h>
#include <inst2D.h>
using namespace inst;
using namespace inst::i2d;

Bool g_bExit = False;

SmartPtr<CGameWnd> g_pMainWnd;
HWND g_hwnd;
const POS g_Width = 800, g_Height = 600;

SmartPtr<CGraphics> g;
SmartPtr<CSurf> pback;
SmartPtr<CSurf> pic_ori;

POS pic_x =0 , pic_y = 0;
Float scale = 1.0f;

void OnReset()
{
    pic_ori.Recreate( L"C:\\a.bmp" );
}

void MainWnd_WinProc(UINT msg,WPARAM wparam,LPARAM lparam)
{
    Switch (msg)
    {
    Case WM_KEYDOWN:
        Switch (wparam)
        {
        case 'A': pic_x += 50 ;break;
        case 'S': pic_y -= 50 ;break;
        case 'D': pic_x -= 50 ;break;
        case 'W': pic_y += 50 ;break;
        case 'Q': scale*=1.05f ;break;
        case 'E': scale/=1.05f ;break;
        }
        break;
    Case WM_DISPLAYCHANGE:
        g->Reset();
        OnReset();
        break;
    Case WM_DESTROY:
        g_bExit=True;
        break;
    }
}

void Init()
{
    g_pMainWnd = new CGameWnd(L"TestWnd");
    g_pMainWnd->SetCallback(&MainWnd_WinProc);
    g_pMainWnd->Show();
    g_hwnd = g_pMainWnd->GetHWnd();

    CGraphics::CreateGraphics(g_Width,g_Height,g_hwnd);
    g = CGraphics::GetGraphics();
    pback = g->GetBackBuffer();

    pic_ori = new CSurf();
}

void Render()
{
    if( (g_pMainWnd->GetStyle()&WS_MINIMIZE) != 0 ) return;
    pback->FillRect(0,0,pback->GetW(),pback->GetH(),Rgb(0,0,0));
    pback->Stretch( pic_x, pic_y, pic_ori->GetW() * scale, pic_ori->GetH() * scale,
        pic_ori, 0, 0, pic_ori->GetW(), pic_ori->GetH(), False);
    g-&gtresent();
}

Bool MsgLoop()
{
    if(g_bExit)return True;
    ::MSG msg;
    ZeroMemory(&msg,sizeof(msg));
    if(:eekMessage(&msg,0,0U,0U,PM_REMOVE))
    {
        ::TranslateMessage(&msg);
        :ispatchMessage(&msg);
    }
    Render();
    return False;
}

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR CmdLine,int nShowCmd)
{
    Init();
    OnReset();
    While (1)
        if(MsgLoop())break;
    return 0;
}

下面对几个重点进行说明(这些语句省略了以前的大量枯燥代码):

g_pMainWnd = new CGameWnd(L"TestWnd");
// 创建一个OverlappedWindow风格的窗口
// 然后,通过它的AdjustSize等方法可以方便地调整窗口,但本程序中,直接交给了下面的函数,真省事!

CGraphics::CreateGraphics(g_Width,g_Height,g_hwnd,[True],[True]);
// 根据传入的BackBuf尺寸,建立ddraw及前后台缓冲,
// 然后,根据客户区(==BackBuf尺寸)自动调整窗口的尺寸,调整窗口位置(居中)
// (如果可选的第4个参数(windowed)为False,则调整窗口风格为无边匡标题兰的最大化窗口)
// 当然如果不想自动调整窗口,可以把可选的第5个参数指定为False


pback->Stretch( pic_x, pic_y, pic_ori->GetW() * scale, pic_ori->GetH() * scale,
   pic_ori, 0, 0, pic_ori->GetW(), pic_ori->GetH(), False);
// 拉伸Blt表面。这里会先在逻辑层进行剪裁计算,不仅保证Blt不出错,还保证贴图的位置在逻辑上正确!

g->Present();
// 根据windowed与否,以及窗口客户区大小等,进行Present.

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-9-19 19:25:00 | 显示全部楼层

Re:Ddraw游戏菜鸟群:67190884 欢迎大家进入,具体介绍请进

PS. 虽然这已经非常方便了,但还不是2D场景引擎,只是绘图引擎
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 07:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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