D2D RPG游戏开发日记(二)--角色/队伍

角色图片类似于这种的四向图每次只绘制其中一个

初始的player类属性

class Player
{
public:

    //队伍中角色数目
    int length = 3;
    //是否激活--角色是否在队伍中
    int is_active = 0;
    //window上坐标
    int x = 0;
    int y = 0;
    //位置修正参数--角色图像的大小
    int x_offset = 46;
    int y_offset = 92;
    //角色在地图上的坐标
    int x_map = 0;
    int y_map = 0;
    //方向移动的朝向
    int face = 1;
    //行走参数
    long walk_interval = 100; //动画帧切换的速度(ms)
    int speed = 10; //速度

    ID2D1Bitmap *bitmap; //角色的图像接口

画角色方法

void Player::DrawPlayer(HWND hWnd, Player player, int face, int animation_ctrl, ID2D1RenderTarget *pRenderTarget)
{
    D2D1_SIZE_F size = player.bitmap->GetSize();

    // Draw bitmap
    pRenderTarget->DrawBitmap(
        player.bitmap,
        D2D1::RectF(
            player.x,
            player.y - player.y_offset,
            player.x + size.width / 4,
            player.y - player.y_offset + size.height / 4),   //D2D::RectF 要在屏幕上绘制的区域
        1.0f,
        D2D1_BITMAP_INTERPOLATION_MODE_LINEAR,
        D2D1::RectF(
        (animation_ctrl % 4)*(size.width / 4),
            size.height / 4 * (face - 1),
            (animation_ctrl % 4)*(size.width / 4) + size.width / 4,
            size.height / 4 * (face - 1) + size.height / 4)  //角色图片上的区域
    );

}

队伍角色切换方法

//player 成员之间传递属性
void set_player(Player player[], int oldindex, int newindex, int *current_player)
{
    player[newindex].x_map = player[oldindex].x_map;
    player[newindex].y_map = player[oldindex].y_map;
    player[newindex].face = player[oldindex].face;

    *current_player = newindex;
}

//TAB--队伍切换
VOID change_player(Player player[], int *current_player)
{
    for (int i = *current_player + 1; i < player[*current_player].length; i++)
    {
        if (player[i].is_active == 1)
        {
            set_player(player, *current_player, i, current_player);
            return;
        }
    }
    for (int i = 0; i < *current_player; i++)
    {
        if (player[i].is_active == 1)
        {
            set_player(player, *current_player, i, current_player);
            return;
        }
    }
}
时间: 2024-10-24 22:35:50

D2D RPG游戏开发日记(二)--角色/队伍的相关文章

FFT与游戏开发(二)

FFT与游戏开发(二) 首先补充下傅里叶变换的原理--把函数分解到一系列正交基上,这些正交基复合下面的条件: \[ \begin{cases} \int_{-\infty}^{+\infty} f_k(x) f_j(x) \mathrm d x \neq 0 & k=j \\int_{-\infty}^{+\infty} f_k(x) f_j(x) \mathrm d x = 0 & k\neq j \end{cases} \] 其实这就是一种基的变换,图形学中也有一些变换,如坐标系的变换

Unity3D独立游戏开发日记(二):摆放建筑物

在沙盒游戏里,能自由建造是很重要的特点,比如说风靡全球的<我的世界>,用一个个方块就能搭建出规模宏大的世界.甚至有偏激的人说,没有自由建造,就不是一个真正的沙盒游戏.的确,沙盒游戏的魅力有很大一部分是能自由构建一个游戏世界.看着自己一砖一瓦搭建起一个城堡世界会很有成就感的. 现如今的手游,大多数就是一个争斗和炫耀的世界.不管是传奇类的狂霸拽酷,还是连连看,消消乐等好友排名,就是消费国人的虚荣心.其实,游戏是第九艺术,要上升到艺术的角度.在游戏里,玩家需要一种情感的宣泄和寄托以及体验. 说了这么

Unity3D 游戏开发构架篇 ——角色类的设计与持久化

在游戏开发中,游戏角色占了很大的篇幅,可以说游戏中所有的内容都是由主角所带动.这里就介绍一下角色类的设计和持久化. 一.角色类应用场景和设计思想 游戏中的角色类型不一而足,有不同的技能,有不同的属性等等.有些一个玩家只有一个角色,有些一个玩家可以有多个角色.这里就目前项目来描述一下角色类的构造,思路都是类似的. 早期我写角色类都是直接一个Class,然后想到什么属性就往里面添加,如果游戏过程中需要对属性的修改,逻辑判断也写在这个类中,这样必然导致类的庞大和臃肿,最后你自己也忘记了自己写在什么地方

在线捉鬼游戏开发之二 - 设计业务对象与对象职责划分(3)

“回忆总是残酷的”——在“设计业务对象与对象职责划分(2)”中,对旧版本的代码进行了剖析,也发现了不少臭味道,本篇将记录我是如何建设新版的业务对象职责划分. 一.复习设计模式 当初自学设计模式的路径是:从<大话设计模式>开始(做了笔记),到Gof的<设计模式>,再到辛勤网友们的各篇总结日志(只看C#的可能会有些局限~).此后,每当我有需要更新代码的时候,或者觉得不太记得清23种经典设计模式的时候,我就会回翻我的笔记,主要看:模式目的.应用场景,以最快速度在脑子里回放.在复习的同时,

Unity3D独立游戏开发日记(一):动态生成树木

目前写的独立游戏是一个沙盒类型的游戏.游戏DEMO视频如下: 提到沙盒类型的游戏,就有人给出了这样的定义: 游戏世界离现实世界越近,自由度.随机度越高才叫沙盒游戏.所谓自由度,就是你在游戏里想干啥就干啥,想开车就开车,想走路就走路.想盖房子就盖房子,没有城管来找你麻烦.那么随机度,就是每天发生的事情不能一样,做的任务也不会就一条线路可走. 在我的沙盒游戏里,地形上的树木,岩石等都是随机生成的,这样不同的人玩的地图都会不一样.当然如果最后能做到地形也随机生成那就更完美了. 下面我就讲下树木随机生成

Android 游戏开发(二)SurfaceView初探

SurfaceView游戏框架在游戏开发当中有举足轻重的地位.SurfaceHolder类是用来控制SurfaceView的大小.格式,并且主要用于监听Surface的状态.SurfaceView好像就是一块内存数据里面记录着数据,更改数据而是由SurfaceHolder来控制,使用SurfaceHolder的lockCanvas()函数来获取SurfaceView的Canvas对象.然后在Canvas上绘制内容来修改SurfaceView中的数据. import android.content

项目游戏开发日记 No.0x000005

还有一周就要交项目了, 看着周围的人也都忙碌了起来, 看着大部分人的项目都已经初具容貌, 我们团队里面也搞得人心惶惶, 一来是, 时间不多了, 还有很多事情要做, 二来是游戏开发的最后阶段简直是煎熬, 完全不能放下心. 游戏虽然已经实现了无数个小功能, 但是, 美工一直是我们避讳的难题, 不是不做, 而是三个人都不擅长这方面, 对美感...根本没有概念. 前几天在逻辑实现了一半的时候, 我们决定去做一下开始界面, 结果对开始界面的样式和实现方法各执己见, 基本上每一个想到的样式都试验过了, 但是

unity3D游戏开发日记(二)——晚

已经凌晨十二点半了,是第二天了 虽然比预想的稍微慢了点,但是还要总结一下(2D项目): 一.多层背景以不同速度滚动,实现远近效果: 二.射击类中碰撞检测由子弹的代码来处理,逻辑会比较清晰: 三.书上好多的代码.函数.功能unity新版本已经弃用了,最好的学习方式还是看官方文档. 老规矩,已经提交审核了,等审核过了再上传网址——晚安

项目游戏开发日记 No.0x000001

既然已经决定了开发软件, 时不时就要练练手, 还要时不时的去寻找素材, 因为开发的人物设定就是DotA2里面的祈求者, 所以, 就去找了他的相关人物图片和模型, 结果不是很乐观, 因为我们开发游戏的环境比较特殊, 2.5d横板, 一般截图照相都不会选的角度, 所以, 在万般无奈的境地下, 我想到了一个方法:用3D模型来截, 这个想法一产生, 我马上就开始动手去找3D人物模型, 我最开始的目的是, 找一个3DQ版的模型, 拿回来用3D-Max改成需要的, 但是大部分的模板都是收费的, 我们有没有经