⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swfdec_sprite_movie_as.c

📁 Swfdec is a decoder/renderer for Macromedia Flash animations. The decoding and rendering engine is
💻 C
📖 第 1 页 / 共 2 页
字号:
  } else {    depth = swfdec_as_value_to_integer (cx, &argv[0]);    other = swfdec_movie_find (movie->parent, depth);  }  if (other)    swfdec_movie_set_depth (other, movie->depth);  swfdec_movie_set_depth (movie, depth);}static voidswfdec_sprite_movie_createEmptyMovieClip (SwfdecAsContext *cx, SwfdecAsObject *obj,    guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){  SwfdecMovie *movie, *parent;  int depth;  const char *name;  parent = SWFDEC_MOVIE (obj);  name = swfdec_as_value_to_string (cx, &argv[0]);  depth = swfdec_as_value_to_number (cx, &argv[1]);  movie = swfdec_movie_find (parent, depth);  if (movie)    swfdec_movie_remove (movie);  movie = swfdec_movie_new (SWFDEC_PLAYER (cx), depth, parent, NULL, name);  swfdec_movie_initialize (movie);  SWFDEC_AS_VALUE_SET_OBJECT (rval, SWFDEC_AS_OBJECT (movie));}static voidswfdec_sprite_movie_copy_props (SwfdecMovie *target, SwfdecMovie *src){  target->matrix = src->matrix;  target->color_transform = src->color_transform;  swfdec_movie_queue_update (target, SWFDEC_MOVIE_INVALID_MATRIX);}static voidswfdec_sprite_movie_init_from_object (SwfdecMovie *movie, SwfdecAsObject *obj){  swfdec_movie_initialize (movie);}static voidswfdec_sprite_movie_attachMovie (SwfdecAsContext *cx, SwfdecAsObject *obj,    guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){  SwfdecMovie *movie = SWFDEC_MOVIE (obj);  SwfdecMovie *ret;  const char *name, *export;  int depth;  SwfdecGraphic *sprite;  export = swfdec_as_value_to_string (cx, &argv[0]);  name = swfdec_as_value_to_string (cx, &argv[1]);  if (argc > 3) {    SWFDEC_FIXME ("attachMovie's initObject isn't implemented");  }  sprite = swfdec_swf_instance_get_export (movie->swf, export);  if (!SWFDEC_IS_SPRITE (sprite)) {    if (sprite == NULL) {      SWFDEC_WARNING ("no symbol with name %s exported", export);    } else {      SWFDEC_WARNING ("can only use attachMovie with sprites");    }    return;  }  depth = swfdec_as_value_to_integer (cx, &argv[2]);  if (swfdec_depth_classify (depth) == SWFDEC_DEPTH_CLASS_EMPTY)    return;  ret = swfdec_movie_find (movie, depth);  if (ret)    swfdec_movie_remove (ret);  ret = swfdec_movie_new (SWFDEC_PLAYER (obj->context), depth, movie, sprite, name);  SWFDEC_LOG ("attached %s (%u) as %s to depth %u", export, SWFDEC_CHARACTER (sprite)->id,      ret->name, ret->depth);  /* run init and construct */  swfdec_sprite_movie_init_from_object (ret, NULL);  SWFDEC_AS_VALUE_SET_OBJECT (rval, SWFDEC_AS_OBJECT (ret));}static voidswfdec_sprite_movie_duplicateMovieClip (SwfdecAsContext *cx, SwfdecAsObject *obj,    guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){  SwfdecMovie *movie = SWFDEC_MOVIE (obj);  SwfdecMovie *new;  const char *name;  int depth;  name = swfdec_as_value_to_string (cx, &argv[0]);  depth = swfdec_as_value_to_integer (cx, &argv[1]);  if (swfdec_depth_classify (depth) == SWFDEC_DEPTH_CLASS_EMPTY)    return;  new = swfdec_movie_duplicate (movie, name, depth);  if (new == NULL)    return;  swfdec_sprite_movie_copy_props (new, movie);  if (SWFDEC_IS_SPRITE_MOVIE (new)) {    g_queue_push_tail (SWFDEC_PLAYER (cx)->init_queue, new);    swfdec_movie_queue_script (new, SWFDEC_EVENT_LOAD);    swfdec_movie_run_construct (new);  }  swfdec_movie_initialize (new);  SWFDEC_LOG ("duplicated %s as %s to depth %u", movie->name, new->name, new->depth);  SWFDEC_AS_VALUE_SET_OBJECT (rval, SWFDEC_AS_OBJECT (new));}static voidswfdec_sprite_movie_removeMovieClip (SwfdecAsContext *cx, SwfdecAsObject *obj,    guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){  SwfdecMovie *movie = SWFDEC_MOVIE (obj);  if (swfdec_depth_classify (movie->depth) == SWFDEC_DEPTH_CLASS_DYNAMIC)    swfdec_movie_remove (movie);}static voidswfdec_sprite_movie_getURL (SwfdecAsContext *cx, SwfdecAsObject *obj,    guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){  SwfdecMovie *movie = SWFDEC_MOVIE (obj);  const char *url;  const char *target;  url = swfdec_as_value_to_string (cx, &argv[0]);  if (argc > 1) {    target = swfdec_as_value_to_string (cx, &argv[1]);  } else {    SWFDEC_ERROR ("what's the default target?");    target = NULL;  }  if (argc > 2) {    SWFDEC_ERROR ("passing variables is not implemented");  }  swfdec_movie_load (movie, url, target, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);  /* FIXME: does this function return something */}static voidswfdec_sprite_movie_getDepth (SwfdecAsContext *cx, SwfdecAsObject *obj,    guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){  SwfdecMovie *movie = SWFDEC_MOVIE (obj);  SWFDEC_AS_VALUE_SET_INT (rval, movie->depth);}static voidswfdec_sprite_movie_getBounds (SwfdecAsContext *cx, SwfdecAsObject *obj,        guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){  int x0, x1, y0, y1;  SwfdecAsValue val;  SwfdecAsObject *object;  SwfdecMovie *movie = SWFDEC_MOVIE (obj);  object = swfdec_as_object_new_empty (cx);  if (object == NULL)    return;  if (swfdec_rect_is_empty (&movie->extents)) {    x0 = x1 = y0 = y1 = 0x7FFFFFF;  } else {    x0 = movie->extents.x0;    y0 = movie->extents.y0;    x1 = movie->extents.x1;    y1 = movie->extents.y1;  }  SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (x0));  swfdec_as_object_set_variable (object, SWFDEC_AS_STR_xMin, &val);  SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (y0));  swfdec_as_object_set_variable (object, SWFDEC_AS_STR_yMin, &val);  SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (x1));  swfdec_as_object_set_variable (object, SWFDEC_AS_STR_xMax, &val);  SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (y1));  swfdec_as_object_set_variable (object, SWFDEC_AS_STR_yMax, &val);  SWFDEC_AS_VALUE_SET_OBJECT (rval, object);}voidswfdec_sprite_movie_init_context (SwfdecPlayer *player, guint version){  SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);  SwfdecAsValue val;  SwfdecAsObject *proto;  player->MovieClip = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global,       SWFDEC_AS_STR_MovieClip, 0, NULL, 0));  if (player->MovieClip == NULL)    return;  proto = swfdec_as_object_new (context);  if (!proto)    return;  SWFDEC_AS_VALUE_SET_OBJECT (&val, proto);  swfdec_as_object_set_variable_and_flags (player->MovieClip,      SWFDEC_AS_STR_prototype, &val, SWFDEC_AS_VARIABLE_HIDDEN |      SWFDEC_AS_VARIABLE_PERMANENT);  /* now add all the functions */  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_attachMovie, SWFDEC_TYPE_SPRITE_MOVIE,      swfdec_sprite_movie_attachMovie, 3);  if (version >= 6) {    swfdec_as_object_add_function (proto, SWFDEC_AS_STR_createEmptyMovieClip, SWFDEC_TYPE_SPRITE_MOVIE,	swfdec_sprite_movie_createEmptyMovieClip, 2);  }  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_duplicateMovieClip, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_duplicateMovieClip, 2);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getBytesLoaded, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_getBytesLoaded, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getBytesTotal, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_getBytesTotal, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getDepth, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_getDepth, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getNextHighestDepth, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_getNextHighestDepth, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getURL, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_getURL, 2);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_gotoAndPlay, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_gotoAndPlay, 1);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_gotoAndStop, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_gotoAndStop, 1);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_hitTest, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_hitTest, 1);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_nextFrame, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_nextFrame, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_play, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_play,	0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_prevFrame, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_prevFrame, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_removeMovieClip, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_removeMovieClip, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_startDrag, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_startDrag, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_stop, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_stop,	0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_stopDrag, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_stopDrag, 0);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_swapDepths, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_swapDepths, 1);  swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getBounds, SWFDEC_TYPE_SPRITE_MOVIE,       swfdec_sprite_movie_getBounds, 0);};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -