您好,大神,请教个问题 hge引擎下载

HGE引擎 如何实现地图随着人物移动 QQ 十分谢谢 瓶颈点在于Rander的参数是显示在屏幕上的位置。。_百度知道
HGE引擎 如何实现地图随着人物移动 QQ 十分谢谢 瓶颈点在于Rander的参数是显示在屏幕上的位置。。
而new Sprite是显示地图的位置 可是只能实例化一次
那么如何做到 改变地图的绘制坐标呢。。。。。。。。。跪求大神啊
提问者采纳
你把地图的render(x,y)的x,y设成变量,随着人物的移动而变化。建议你看看HGE的第6个例子《tutorial06》里面有背景的移动
其他类似问题
hge的相关知识
其他1条回答
一张大texture,人物移动时,调用Sprite的SetTextureRect方法就可以实现啦
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁HGE引擎及实例,可以下载学习 - 下载频道
- CSDN.NET
&&&&HGE引擎及实例,可以下载学习
HGE引擎及实例,可以下载学习
GetClientRect(pWnd-&GetSafeHwnd(),&rs);
hge = hgeCreate(HGE_VERSION);
hge-&System_SetState(HGE_LOGFILE, &hge_tut07.log&);
//hge-&System_SetState(HGE_FRAMEFUNC, FrameFunc);
hge-&System_SetState(HGE_RENDERFUNC, RenderFunc);
hge-&System_SetState(HGE_TITLE, &HGE Tutorial 07 - Thousand of Hares&);
hge-&System_SetState(HGE_USESOUND, false);
hge-&System_SetState(HGE_WINDOWED, true);
hge-&System_SetState(HGE_SCREENWIDTH, SCREEN_WIDTH);
hge-&System_SetState(HGE_SCREENHEIGHT, SCREEN_HEIGHT);
hge-&System_SetState(HGE_SCREENBPP, 32);
hge-&System_SetState(HGE_HWNDPARENT, pWnd-&GetSafeHwnd());
if(hge-&System_Initiate())
// Load textures
bgtex=hge-&Texture_Load(&bg2.png&);
tex=hge-&Texture_Load(&zazaka.png&);
if(!bgtex || !tex)
// If one of the data files is not found,
// display an error message and shutdown
// MessageBox(NULL, &Can't load BG2.PNG or ZAZAKA.PNG&, &Error&, MB_OK | MB_ICONERROR | MB_APPLMODAL);
hge-&System_Shutdown();
hge-&Release();
// Load font, create sprites
fnt=new hgeFont(&font2.fnt&);
spr=new hgeSprite(tex,0,0,64,64);
spr-&SetHotSpot(32,32);
bgspr=new hgeSprite(bgtex,0,0,800,600);
bgspr-&SetBlendMode(BLEND_COLORADD | BLEND_ALPHABLEND | BLEND_NOZWRITE);
bgspr-&SetColor(0xFF);
bgspr-&SetColor(0xFF);
bgspr-&SetColor(0xFF);
bgspr-&SetColor(0xFF);
// Initialize objects list
pObjects=new sprObject[MAX_OBJECTS];
nObjects=1000;
for(int i=0;i&MAX_OBJECTS;i++)
pObjects[i].x=hge-&Random_Float(0,SCREEN_WIDTH);
pObjects[i].y=hge-&Random_Float(0,SCREEN_HEIGHT);
pObjects[i].dx=hge-&Random_Float(-200,200);
pObjects[i].dy=hge-&Random_Float(-200,200);
pObjects[i].scale=hge-&Random_Float(0.5f,2.0f);
pObjects[i].dscale=hge-&Random_Float(-1.0f,1.0f);
pObjects[i].rot=hge-&Random_Float(0,M_PI*2);
pObjects[i].drot=hge-&Random_Float(-1.0f,1.0f);
SetBlend(0);
// Let's rock now!
hge-&System_Start();
// Delete created objects and free loaded resources
delete[] pO
hge-&Texture_Free(tex);
hge-&Texture_Free(bgtex);
// Clean up and shutdown
hge-&System_Shutdown();
hge-&Release();
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行求个大神教我使用hge引擎!_百度知道
求个大神教我使用hge引擎!
提问者采纳
慢慢的,困意止不住的涌来,珠子在他眼中越来越模糊,最终王林身子一歪,倒在了地上,珠子一直被他抓在手中
提问者评价
其他类似问题
hge的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁3159人阅读
&HGE引擎提供一个基本的GUI控件类,其不实现任何功能,但是提供一套虚函数和属性供派生类使用。
开发者可以在此基础之上开发属于自己的控件,总的来说还是比较方便的。
我在开发自己的游戏框架过程中,吸取了许多经验教训。
建议HGE引擎的使用者们不要直接在渲染过程中使用HGE提供的图形函数,而应该将他们全部都封装在GUI控件派生类中,
这样有几大好处。
1. 更贴近面向对象,使得程序框架清晰;
2. 更好管理资源,使用和释放都在同一个小模块中,即使规模扩大,也方便维护;
3. 易复用,我们可以整理一套统一的基类,然后逐步派生、组合实现我们需要的功能。
下面给出我在开发过程中自己使用的几个方便的基类
* CopyRight 2009 - 2010 GDE工作室
* 游戏UI系统 - HGE游戏引擎控件基类
* ===================================
* 为了提高代码的复用性,提供一些常用的功能作为基类,在构建基于HGE的GUI控件时可以派生复用。
#ifndef GDE_UI_BasicClasses_H_
#define GDE_UI_BasicClasses_H_
#include "../HGE/include/hge.h"
#include "../HGE/include/hgesprite.h"
#include "../HGE/include/hgefont.h"
#include "../HGE/include/hgerect.h"
#include "../HGE/include/hgegui.h"
#include "../HGE/include/hgeguictrls.h"
#include "../HGE/cn/GfxFont.h"
#include "../HGE/cn/GfxEdit.h"
#include &string&
#include &string.h&
#include &stdio.h&
#include &stdlib.h&
/****** 默认带中文字体的基类 ******/
class GDE_BASIC_GUIChineseFont : public hgeGUIObject
GDE_BASIC_GUIChineseFont()
font = new GfxFont("宋体",20,TRUE,FALSE,FALSE);// 宋体,粗体,非斜体,非平滑
font-&SetColor(0xFFFFFFFF);
// 设置像素字体颜色,默认白色
//fonttype 字体,size 文字大小
GDE_BASIC_GUIChineseFont( std::string fonttype , int size )
font = new GfxFont(fonttype.c_str(),size,TRUE,FALSE,FALSE);
font-&SetColor(0xFFFFFFFF);
~GDE_BASIC_GUIChineseFont()
if( font )
//以某种颜色显示一次,然后还原颜色
void FontPrintOnce( int x,int y, DWORD Color, std::string txt )
DWORD oldcolor = font-&GetColor();
font-&SetColor( Color );
font-&Print( x,y, txt.c_str() );
font-&SetColor( oldcolor );
protected:
GfxFont*//中文字体指针
/****** 只用于显示,不用于控制的基类 ******/
class GDE_BASIC_GUIViewOnly : public hgeGUIObject
GDE_BASIC_GUIViewOnly()
this-&rect.Set( 0,0,0,0 );//这样不会覆盖其他GUI控件的控制区
/****** 感应鼠标移动的基类 ******/
class GDE_BASIC_GUIMouseSensitive : public hgeGUIObject
GDE_BASIC_GUIMouseSensitive()
: mx_ ( 0 )
, my_ ( 0 )
, is_mouse_over_ ( FALSE )
virtual ~GDE_BASIC_GUIMouseSensitive(){}
virtual void MouseOver( bool bOver )
is_mouse_over_ = bO
virtual bool MouseMove(float x, float y)
protected:
float mx_,my_; //当前鼠标位置
bool is_mouse_over_; //鼠标是否悬停
具体的一个实例,比如我的界面角色管理类
* CopyRight 2009 - 2010 GDE工作室
* 游戏UI系统 - HGE GUI控件 - 角色管理器
* ===================================
* 提供角色的资源管理、角色图片信息管理等功能
#ifndef GDE_UI_ROLE_MANAGER_H_
#define GDE_UI_ROLE_MANAGER_H_
#include "GDE_UI_BasicClasses.h"
using namespace GDE;
//角色渲染资料单元
struct RoleGuiUnit
RoleGuiUnit( int id , std::string filename , int px, int py ,HGE* pgHGE )
img_filename =
pHGE = pgHGE;
////读取图片
tex = pHGE-&Texture_Load( filename.c_str() ); //装载纹理
w = pHGE-&Texture_GetWidth( tex );
h = pHGE-&Texture_GetHeight( tex );
spr = new hgeSprite( tex, 0, 0, w, h );
~RoleGuiUnit()
pHGE-&Texture_Free( tex );
void SetAttackInfo( std::string txt )
attackinfo =
attackinfo_show_count = 200; //此处和FPS相关
int role_ //角色ID
std::string img_//角色图片文件名
int x,y; //角色坐标(绝对坐标)
D //角色朝向
hgeSprite*
int w,h; //角色图片宽高
HGE* pHGE;
std:://攻击掉血数
int attackinfo_show_
struct RoleGuiUnitAutoPtr
RoleGuiUnitAutoPtr( RoleGuiUnit* r )
~RoleGuiUnitAutoPtr()
RoleGuiUnit* GetPtr()
RoleGuiUnit*
//人物角色管理器GUI
class GDE_GUIRoleManager : public GDE_BASIC_GUIChineseFont
GDE_GUIRoleManager( int id , HGE* pgHGE )
: pHGE( pgHGE )
this-&id =
this-&rect.Set( 0,0,0,0 ); //该GUI控件只用于显示不用于输入
virtual ~GDE_GUIRoleManager()
for( int i = 0; i & roles_.size(); i++ )
delete roles_[i];
roles_.clear();
//增加角色
void AddRole( int x, int y, int role_id, std::string filename )
RoleGuiUnit* tmp = new RoleGuiUnit( role_id, filename, x, y, pHGE );
//RoleGuiUnitAutoPtr ptr( tmp );
roles_.push_back(tmp);
//移除角色
void RemoveRole( int role_id )
std::vector&RoleGuiUnit*&::
for(iter = roles_.begin(); iter != roles_.end(); ++iter )
if( (*iter)-&role_id == role_id )
RoleGuiUnit* ptr = *
roles_.erase( iter );
//设置人物位置
void SetPos( int role_id , int x, int y )
std::vector&RoleGuiUnit*&::
for(iter = roles_.begin(); iter != roles_.end(); ++iter )
if( (*iter)-&role_id == role_id )
(*iter)-&x =
(*iter)-&y =
//设置人物方向
void SetDirection( int role_id , Direction d )
std::vector&RoleGuiUnit*&::
for(iter = roles_.begin(); iter != roles_.end(); ++iter )
if( (*iter)-&role_id == role_id )
(*iter)-&direct =
//是否提示角色信息
void RoleInfo( bool is_enable )
info_enable = is_
//处理角色掉血信息
void AttackInfo( int role_id, std::string txt )
std::vector&RoleGuiUnit*&::
for(iter = roles_.begin(); iter != roles_.end(); ++iter )
if( (*iter)-&role_id == role_id )
(*iter)-&SetAttackInfo( txt );
//渲染所有角色
virtual void Render()
std::vector&RoleGuiUnit*&::
for(iter = roles_.begin(); iter != roles_.end(); ++iter )
if( (*iter)-&spr )
(*iter)-&spr-&RenderStretch( (*iter)-&x, (*iter)-&y,
(*iter)-&x + (*iter)-&w,
(*iter)-&y + (*iter)-&h );
if( (*iter)-&attackinfo_show_count & 0 )
// TO DO 增加掉血值的alpha变化和位置变化,可以做的更绚
int x = (*iter)-&x + 10;
int y = (*iter)-&y - 20;
font-&Print( x,y,(*iter)-&attackinfo.c_str() );
(*iter)-&attackinfo_show_count--;
//virtual bool MouseLButton(bool bDown);
//virtual void MouseOver( bool bOver );
//virtual bool MouseMove(float x, float y);
HGE* pHGE;
这个问题调了我半个小时~总结教训中。。
此处容器模板成员使用指针的原因:
vector模板成员RoleGuiUnit内涉及到无法复制的内容,如果不使用指针的话,在vector的push_back操作中会
出现run-time error,所以使用指针容器。
使用指针容器的时候需要注意,在erase或者clear其成员的时候,需要手动delete成员指针。(因为vector默认
在erase或者delete的时候调用该类的析构函数,若是指针,则无法释放其指向的内容。
std::vector&RoleGuiUnit*& roles_;
bool info_//是否提示角色信息
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:265378次
积分:4821
积分:4821
排名:第1902名
原创:199篇
评论:281条
(1)(1)(1)(3)(1)(1)(1)(1)(1)(3)(1)(1)(2)(2)(2)(3)(3)(3)(3)(4)(1)(8)(8)(5)(5)(9)(8)(5)(6)(5)(10)(7)(17)(25)(16)(11)(8)(2)(7)

我要回帖

更多关于 hgem2引擎官网 的文章

 

随机推荐