回 帖 发 新 帖 刷新版面

主题:关于动画的问题

我做了个程序,就是一个字符在屏幕中央,我希望能够控制它上下左右移动,移动过程中同时把原来那个字符消掉,但我不希望用CLS或者PRINT SPACE$(*)类的语句,我想只把原来那一小部分清除,有没有类似的语句或者程序?

回复列表 (共12个回复)

沙发

1.搞清楚目的
2.分清楚过程(你能想得到的能达到目的的所有过程)
3.选择效率高速度快的过程
4.你不希望?那么程序呢?

板凳

呵呵。

3 楼

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 楼

哎,我当时就是没想到可以通过print " "的方法来清除字符,现在我知道了,可以用cls,print space$(80),print " ",line(x,x)-line(y,y),黑色....来清楚,可能清屏的方法也就这些了吧?

5 楼

不止,
得看是图形屏幕还是文本屏幕,
还可以显存操作,还得看具体的颜色要求。

这些东西太笼统了,其实想要实现什么样的效果,
怎么挑选比较好的方法,需要长期积累。

6 楼


line(x,x)-line(y,y),j是什么意思呀?[em18]

7 楼

画(x,x)(x,y)(y,x)(y,y)的四边形,颜色为j

8 楼

楼上口胡,是(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 楼

这是对显存的读写
是文本屏幕0模式的操作
其实它的效率,远远比不上QB里的color和print
只适用于你有很多自定义需求的情况下使用.

10 楼

[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?

我来回复

您尚未登录,请登录后再回复。点此登录或注册