首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建教育动画的框架

创建教育动画的框架
EN

Stack Overflow用户
提问于 2009-07-12 20:43:05
回答 1查看 358关注 0票数 0

很多时候,我发现我需要一个软件来创建简单的教育动画。在这些动画中,我想逐一画一系列简单的动画。

例如,我想展示一个n皇后问题的回溯算法是如何工作的。在这种情况下,我想画一个棋盘,在左上角的正方形上画一个皇后,然后在它旁边的正方形上画另一个皇后,然后第二个皇后向下画,直到它没有受到第一个皇后的威胁,然后添加第三个皇后等等。参见此页,例如java applet。

我试着用我在网络上找到的免费的可视化框架来编写这些程序,比如processing.org和各种HTML-画布包装,但是我所缺少的主要东西是一个可以根据我的命令显示/指导动画的对象。

例如,在处理过程中,如果我创建了一个名为" queen“的对象,该对象应该被绘制到屏幕上并像皇后那样移动。我不得不照顾自己:

  1. 将事件分派给皇后对象(例如,当用户悬停在它上面时,如果我想改变它的颜色)。
  2. 将皇后对象绘制到屏幕上。

因此,我不得不在主循环中编写表单的代码:

代码语言:javascript
复制
def mainloop():
    for obj in DrawableObjects: obj.draw()
def onclick(e):
    for obj in ResponsiveObjects: obj.handleClick(e)

这是丑陋和重复!

我希望有一个动画框架,允许我使用自动绘制到屏幕上的对象(假设我将为它们定义z轴,解决交叉问题),如果我愿意的话,它将自动响应用户的交互。我想象的框架的一个示例代码是:

代码语言:javascript
复制
class queen(DrawableObject):
    def __init__(self,boardX,boardY):
        self.boardX,self.boardY = boardX,boardY
        self.x = square_width*x+square_width/2
        self.y = square_height*y+square_height/2
    def draw(self):
        circle(x,y,radius)
    def move(self,direction_x,direction_y,squares):
        if direction_x
        #this would move the queen slowly to the desired direction
        self.boardX += direction_x*squares
        if self.boardX < 0:
             self.boardX = 0
             return
        #ditto for y
        ...
        #Let's pretend this function is blocking
        self.animated_transpose(
             direction_x*squares*square_width,
             direction_y*squares*squre_height
             )
    def delete(self):
        self.fadeOut()

当动画皇后,我将简单地创建一个新的皇后,并使用移动功能来移动它周围,而不担心太多的担心什么时候和地点把它。这个框架应该能帮我解决这个问题。这就是:

代码语言:javascript
复制
def main():
    queens = []
    for i in range(8): queens.append(Queen(0,i))
    # find a solution by stupid random walk
    steps = 0
    while queens_threats_one_another(queens):
        queens[rand(8)].move(choose([-1,1],0,1)
        step += 1
    write_to_screen("did it with %d steps"%steps)

该框架还提供了其他一些很好的功能,这将是对网络友好的。也就是说,javascript、flash或Java。而且它是免费的。

这种(或类似的)框架是否存在?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-13 02:22:08

因为Flash的显示架构是基于对象的,所以它似乎非常适合于这类事情。也有许多动画库的Flash,使这种事情非常容易。

例如,假设您定义了一个Queen类,它扩展了内置的Sprite类。使用TweenLite库,在2秒钟内创建和移动皇后的代码如下所示:

代码语言:javascript
复制
var queen:Queen = new Queen();
queen.x = 100; // based on pixels, but you could easily create a square-to-pixel conversion
queen.y = 100;
addChild(queen); // assuming this code is in another DisplayObject, such as the stage

TweenLite.to(queen, 2, {x:200, y:300});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1116873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档