主题:关于动画的问题
54BB
[专家分:380] 发布于 2006-03-26 13:25:00
我做了个程序,就是一个字符在屏幕中央,我希望能够控制它上下左右移动,移动过程中同时把原来那个字符消掉,但我不希望用CLS或者PRINT SPACE$(*)类的语句,我想只把原来那一小部分清除,有没有类似的语句或者程序?
回复列表 (共12个回复)
沙发
moz [专家分:37620] 发布于 2006-03-26 16:14:00
1.搞清楚目的
2.分清楚过程(你能想得到的能达到目的的所有过程)
3.选择效率高速度快的过程
4.你不希望?那么程序呢?
3 楼
moz [专家分:37620] 发布于 2006-04-01 20:12:00
do
color,0
locate xx+1,yy+1
print " ";
color,7
locate x+1,y+1
print " ";
xx=x
yy=y
do
k$=inkey$
loop while k$=""
select case k$
case chr$(0)+chr$(72):x=x-1:if x<0 then x=24
case chr$(0)+chr$(80):x=x+1:if x>24 then x=0
case chr$(0)+chr$(75):y=y-1:if y<0 then y=79
case chr$(0)+chr$(77):y=y+1:if y>79 then y=0
end select
loop until k$=chr$(27)
4 楼
54BB [专家分:380] 发布于 2006-04-01 20:32:00
哎,我当时就是没想到可以通过print " "的方法来清除字符,现在我知道了,可以用cls,print space$(80),print " ",line(x,x)-line(y,y),黑色....来清楚,可能清屏的方法也就这些了吧?
5 楼
moz [专家分:37620] 发布于 2006-04-01 21:33:00
不止,
得看是图形屏幕还是文本屏幕,
还可以显存操作,还得看具体的颜色要求。
这些东西太笼统了,其实想要实现什么样的效果,
怎么挑选比较好的方法,需要长期积累。
6 楼
diylym [专家分:30] 发布于 2006-09-02 18:20:00
line(x,x)-line(y,y),j是什么意思呀?[em18]
7 楼
puangenlun [专家分:0] 发布于 2006-09-10 16:12:00
画(x,x)(x,y)(y,x)(y,y)的四边形,颜色为j
8 楼
maxumi [专家分:2200] 发布于 2006-09-11 07:45:00
楼上口胡,是(x,x)-(y,y)的直线, 不是四边形.
在屏幕上快速显示字符串的过程:
SUB xpr (x AS INTEGER, y AS INTEGER, stri AS STRING, col AS INTEGER, col2 AS INTEGER)
col = col + col2 * 16
DEF SEG = &HB800
l = LEN(stri)
ptr = y * 160 + x * 2
FOR i = 1 TO l
p = ASC(MID$(stri, i, 1))
POKE ptr, p
POKE ptr + 1, col
ptr = ptr + 2
NEXT i
END SUB
参数说明:
x是x坐标.(0-79)
y是y坐标.(0-19)
stri是要显示的字符串.
col是字符本身的颜色.
col2是字符的背景色.
9 楼
moz [专家分:37620] 发布于 2006-09-11 12:57:00
这是对显存的读写
是文本屏幕0模式的操作
其实它的效率,远远比不上QB里的color和print
只适用于你有很多自定义需求的情况下使用.
10 楼
maxumi [专家分:2200] 发布于 2006-09-13 14:53:00
[quote]这是对显存的读写
是文本屏幕0模式的操作
其实它的效率,[color=red]远远比不上[/color]QB里的color和print
只适用于你有很多自定义需求的情况下使用.[/quote]
远远比不上?
DECLARE SUB xpr (x AS INTEGER, y AS INTEGER, stri AS STRING, col AS INTEGER, col2 AS INTEGER)
CLS
DEFINT A-Z
LOCATE 1, 1
PRINT "Please Wait..."
t& = TIMER
FOR i& = 1 TO 100000
LOCATE 10, 10
COLOR 7, 0
PRINT "a";
NEXT i&
COLOR 7, 0
LOCATE 2, 1
PRINT TIMER - t&
t& = TIMER
FOR i& = 1 TO 100000
xpr 12, 12, "a", 6, 0
NEXT i&
COLOR 7, 0
LOCATE 3, 1
PRINT TIMER - t&
SUB xpr (x AS INTEGER, y AS INTEGER, stri AS STRING, col AS INTEGER, col2 AS INTEGER) STATIC
col = col + col2 * 16
DEF SEG = &HB800
l = LEN(stri)
ptr = y * 160 + x * 2
FOR i = 0 TO l - 1
p = ASC(MID$(stri, i + 1, 1))
POKE ptr, p
POKE ptr + 1, col
ptr = ptr + 2
NEXT i
END SUB
运行显示:
14.71875 <-----------500000次locate+print+color所用时间
2.7890625 <-----------500000次xpr所用时间
xpr函数比color和print快5倍还多,不知这函数在什么地方赶不上color+print?
我来回复