游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: yinhe726

帮帮我这个VB新手.....

[复制链接]

16

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2005-6-22 12:39:00 | 显示全部楼层

Re: 帮帮我这个VB新手.....

你看我这图,我能检测到鼠标的位置,于是我打算通过鼠标单击后,把角色直接显示到该坐标位置上
   代码:
Private Sub Blt()    这是每次循环执行的绘图函数
dim maprect as RECT
dim spritwrect as RECT
back.BltColorFill maprect, 0           以黑色清除并填充后台绘图平面
maprect.Bottom = ddsd1.lHeight  ddsd1是建立背景图平面的属性
maprect.Right = ddsd1.lWidth      设置将要显示在屏幕上的背景图的大小
Call back.BltFast(0, 0, map, maprect, DDBLTFAST_WAIT)把map绘图平面内容复制到后台
获得前景角色位图平面的矩形区域
spriterect.Right = ddsd3.lWidth
spriterect.Bottom = ddsd3.lHeight
把角色复制到后台
Call back.BltFast(sx, sy, Sprite, spriterect, DDBLTFAST_SRCCOLORKEY)
back.DrawText 50, 50, mx & "  " & my, False这里输出的是鼠标的当前坐标
main.Flip Nothing, DDFLIP_WAIT 这里不知道是什么意思...
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
sx = X
sy = Y
End Sub
调试时,单击鼠标后角色就不见了...????这是怎么回事呢??
sf_200562212397.jpg

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-6-22 18:03:00 | 显示全部楼层

Re:帮帮我这个VB新手.....

是单位的关系,form的鼠标单位并不是像素。默认是twip ,除以15才是像素

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-6-22 20:18:00 | 显示全部楼层

Re:帮帮我这个VB新手.....

不一定,更确切的说是横坐标除以screen.TwipsPerPixelX,纵坐标除以screen.TwipsPerPixelY

16

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2005-6-22 22:36:00 | 显示全部楼层

Re:帮帮我这个VB新手.....

这个不重要了,我想听点关于DirectInput类,不知道是不是一定要DirectInput类控制角色的移动,我用VB下默认的 Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)事件,结果看到的效果就是.....哎,像俗话说的"卡机"吧,角色的移动超级呆板!!!就像一个图片框每次都把Top的值+一个数地滚动.
另外,人物角色的动作都做在一张图片内,加栽动作时一定会很麻烦;DirectDraw中有什么方法从一张大的图片中获取固定尺寸的一个区域?

0

主题

74

帖子

80

积分

注册会员

Rank: 2

积分
80
发表于 2005-6-23 12:13:00 | 显示全部楼层

Re:帮帮我这个VB新手.....

学习了.

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-6-24 17:09:00 | 显示全部楼层

Re:帮帮我这个VB新手.....

首先要说的是,如果是基本的一些按键响应KeyDown、KeyUp事件绝对足够了,你说的呆板问题是其它方面没有做好的问题。你说一下你是怎么实现角色移动的?

你说从大图中获取区域,最基本的Blt函数就支持,好好看看帮助文件吧。

16

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2005-6-24 22:19:00 | 显示全部楼层

Re:帮帮我这个VB新手.....

好吧,角色的移动我是通过响应按键事件把角色的当前坐标进行加减运算,而有一个循环过程中就Call backPage.BltFast(sx, sy, Sprite, spriterect, DDBLTFAST_SRCCOLORKEY)把角色输出到屏幕上.
Bit??是不是Win32 API的函数?DirectDraw里没有相关的函数吗?

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-6-26 12:37:00 | 显示全部楼层

Re:帮帮我这个VB新手.....

你是在响应事件过程中进行加减运算吗?那样不呆板才怪。
先在全局定义一个数组: Public KeyD(255) as Boolean
你在KeyDown事件中只应该加入一行代码:keyD(keycode)=true
同样在KeyUp事件中加入:keyD(keycode)=false

然后应该在主循环中根据KeyD的值来控制角色移动!

Blt函数Win32API中没有,而是在DirectDrawSurface里面!是比BltFast更完善的绘制函数。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-27 08:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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