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

📄 scriptplayer.java

📁 j2me 上面flash播放器。非常值得研究。就是版本只到2.0
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        {        int j = GetWord();        if (findCharacter(j) != null) return;        SCharacter scharacter = createCharacter(j,-1);        if(scharacter == null) return;        scharacter.type = 5;        int k = super.script[super.pos++] & 0xff;        int l = GetDWord();        Sound sound;   scharacter.object = sound = new Sound(k, l, super.script, super.pos,flash);        if (sound == null)           {           freeCharacter(j);           return;           }        scharacter.dataPos = super.pos;        if(sound.CompressFormat() > 16)           {           freeCharacter(j);           return;           }        else           {           sound.characterTag = j;           sound.next = streamSound.next;           streamSound.next = sound;           return;           }        }*/  private void defineFont() {    SCharacter scharacter;    int ID = GetWord();    scharacter = findCharacter(ID);    if (scharacter == null) scharacter = createCharacter(ID, -1);    if (debug) System.out.println("defineFont() " + ID + " ,-1");    scharacter.type = SCharacter.SCHAR_TYPE_FONT;    scharacter.bounds = new Rect();    scharacter.dataPos = super.pos;    return;  }  private void defineFontInfo() {    int ID, len, i, flags;    SCharacter scharacter;    ID = GetWord();    scharacter = findCharacter(ID);    if (scharacter == null) scharacter = createCharacter(ID, -1);    if (debug) System.out.println("defineFontInfo() " + ID + " ,-1");    len = GetByte();    for (i = 0; i < len; i++) GetByte(); // skip the font name    flags = GetByte();    if ( (flags & 2) == 2) scharacter.fontBold = true;    if ( (flags & 4) == 4) scharacter.fontItalic = true;  }  private void defineText() {    SCharacter scharacter;    int ID = GetWord();    scharacter = findCharacter(ID);    if (scharacter == null) scharacter = createCharacter(ID, -1);    if (debug) System.out.println("defineText() " + ID + ", -1");    scharacter.type = SCharacter.SCHAR_TYPE_TEXT;    scharacter.bounds = GetRect();    scharacter.dataPos = super.pos;    scharacter.matrix = GetMatrix();    scharacter.glyphBits = GetByte();    scharacter.advancedBits = GetByte();  }  private void ParseHeader() {    if (scriptErr != 0)      return;    if (gotHeader)      return;    if (len < 21) {      return;    }    else {      frame = GetRect();      frameRate = GetWord() << 8;      frameDelay = 0x3e80000 / frameRate;      numFrames = GetWord();      numFramesCompletePos = startPos = super.pos;      curFrame = -1;      gotHeader = true;      return;    }  }  public void PushData(byte abyte0[], int i) {    if (scriptErr != 0)      return;    int j = 0;    if (scriptLen < 0) {      int k = Math.min(8 - headerLen, i);      System.arraycopy(abyte0, j, headerBuf, headerLen, k);      j += k;      i -= k;      headerLen += k;      if (headerLen == 8) {        if (headerBuf[0] != 70 || headerBuf[1] != 87 || headerBuf[2] != 83) {          scriptErr = -1;          return;        }        version = headerBuf[3];        scriptLen = headerBuf[4] & 0xff | (headerBuf[5] & 0xff) << 8 |            (headerBuf[6] & 0xff) << 16 | (headerBuf[7] & 0xff) << 24;        scriptLen -= 8;        super.script = new byte[scriptLen];        if (super.script == null) {          scriptErr = -2;          return;        }      }      else {        return;      }    }    if (len + i > scriptLen)      i = Math.min(i, scriptLen - len);    System.arraycopy(abyte0, j, super.script, len, i);    len += i;    if (!gotHeader)      ParseHeader();    gotData.set();  }  /*    private void defineJPEGTables(int i)      {          jpegTableLen = i - 2;          jpegTablePos = super.pos;      }*/  /*    private int ImageClassToUse()      {          if(imageClassToUse == 0)   if(("SLAV" + System.getProperty("java.version")).indexOf("SLAV1.0") == -1)              {                  imageClassToUse = 1;              } else              {                  imageClassToUse = 3;                  try                  {                      Class.forName("sun.awt.image.ImageDecoder");                      imageClassToUse = 2;                  }                  catch(ClassNotFoundException _ex) { }              }          return imageClassToUse;      }*/  private void defineBits(int i, int j) {    int k = GetWord();    int l = 0;    int i1 = 0;    int j1 = 0;    int k1 = 0;    if (findCharacter(k) != null)      return;    SCharacter scharacter = createCharacter(k, -1);    if (scharacter == null)      return;    scharacter.type = 1;    scharacter.dataPos = super.pos - 8;    if (j == 6) {      j1 = super.pos + 2;      k1 = i - 4;      l = jpegTablePos;      i1 = jpegTableLen;    }    else {      l = super.pos;      for (int l1 = l; l1 < super.end; l1++) {        if ( (super.script[l1] & 0xff) != 255 ||            (super.script[l1 + 1] & 0xff) != 217)          continue;        i1 = l1 - l;        break;      }      for (int i2 = l + i1; i2 < super.end; i2++) {        if ( (super.script[i2] & 0xff) != 255 ||            (super.script[i2 + 1] & 0xff) != 216)          continue;        j1 = i2 + 2;        k1 = i - 6 - i1;        break;      }    }    byte abyte0[] = new byte[i1 + k1];    if (abyte0 != null) {      System.arraycopy(super.script, l, abyte0, 0, i1);      System.arraycopy(super.script, j1, abyte0, i1, k1);      /*            switch(ImageClassToUse())                  {                  case 1: // '\001'*/      scharacter.object = new Bitmap(Image.createImage(abyte0, 0, abyte0.length),                                     display);      return;      /*            case 2: // '\002'                      try                      {       Object obj = Class.forName("ImageSource").newInstance();                          if(obj != null)                          {                              ((ImageSource)obj).SetData(abyte0);                              ((ImageSource)obj).CreateInputStream();       Bitmap bitmap = new Bitmap((ImageSource)obj, display);                              ((ImageSource)obj).DestroyInputStream();                              scharacter.object = bitmap;                              return;                          }                      }                      catch(Exception _ex)                      {                          scharacter.object = null;                          return;                      }                      break;                  case 3: // '\003'                  default:                      scharacter.object = null;                      return;                  }*/    }    else {      scharacter.object = null;    }  }  private int tagCtr = 0;  private int doTag() {    if (super.script == null)return -3;    if (scriptErr != 0)return scriptErr;    if (atEnd)return 2;    if (len - super.pos < 2)return 1;    int i = super.pos;    int j = GetWord();    int k = j & 0x3f;    if (k == 63) {      if (len - super.pos < 4) {        super.pos = i;        return 1;      }      k = GetDWord();    }    nextPos = super.pos + k;    super.end = nextPos;    if (nextPos > len) {      super.pos = i;      return 1;    }    if ( (debug) && ( (j >> 6) != TAG_SOUNDSTREAMHEAD) &&        ( (j >> 6) != TAG_SOUNDSTREAMBLOCK)) {//         if (tagCtr>30) System.exit(0);      System.out.println("" + (j >> 6));      tagCtr++;    }    switch (j >> 6) {      case TAG_SOUNDSTREAMHEAD:      case TAG_SOUNDSTREAMBLOCK:        // ToDo: add full sound support        break;      default:        System.err.println("Unknown tag " + (j >> 6) +                           " at ScriptPlayer.doTag()");        break;      case TAG_PROTECT:        // not important for a player        break;      case TAG_DEFINEFONTINFO:      case TAG_DEFINEFONTINFO2:        defineFontInfo();        break;      case 0:        atEnd = true;        break;      case TAG_SHOWFRAME:        curFrame++;        break;      case TAG_DEFINESHAPE:      case TAG_DEFINESHAPE2:      case TAG_DEFINESHAPE3:        defineShape();        break;      case TAG_FREE:        freeCharacter(GetWord());        break;      case TAG_PLACEOBJECT:        placeObject();        break;      case TAG_PLACEOBJECT2:        placeObject2();        break;      case TAG_REMOVEOBJECT:        removeObject();        break;      case TAG_REMOVEOBJECT2:        removeObject2();        break;      case TAG_DEFINEBITS:      case TAG_DEFINEBITSJPEG2:        defineBits(k, j >> 6);        break;      case TAG_JPEGTABLES:        jpegTableLen = k - 2;        jpegTablePos = super.pos;        break;        /*         case TAG_DEFINESOUND:                    defineSound(k);                    break;                 case TAG_STARTSOUND:                    StartSound();                    break;                 case TAG_DEFINEBUTTONSOUND:                    defineButtonExtra(true);                    break;*/      case TAG_DEFINEBUTTON:        defineButton();        break;      case TAG_DEFINEFONT:        defineFont();        break;      case TAG_DEFINETEXT:      case TAG_DEFINETEXT2:        defineText();        break;      case TAG_SETBACKGROUNDCOLOR:        int bgColor = GetColor();        display.setBackgroundColor(bgColor, 3);        flash.setBGColor(bgColor);        break;      case TAG_DOACTION:        if (nActions < 16) {          actionList[nActions] = super.pos;          nActions++;        }        break;      case TAG_DEFINEBUTTONCXFORM:        defineButtonExtra(false);        break;    }    super.pos = nextPos;    return scriptErr;  }  public int DrawFrame(int i) {    if (scriptErr != 0)      return scriptErr;    if (!gotHeader)      return 1;    if (curFrame > i)      FreeAll();    int j;    for (j = 0; curFrame < i && j == 0; j = doTag());    return j;  }  boolean FrameComplete(int i) {    if (numFramesComplete >= i)      return true;    if (scriptComplete)      return true;    if (super.script == null || scriptErr != -3)      return false;    SParser sparser = new SParser();    byte abyte0[] = super.script;    int k = numFramesCompletePos;    sparser.script = abyte0;    sparser.pos = k;    do {      int j;      do {        if (len - sparser.pos < 2)          return false;        j = sparser.GetWord();        int l = j & 0x3f;        if (l == 63) {          if (len - super.pos < 4)            return false;          l = sparser.GetDWord();        }        sparser.pos += l;        if (sparser.pos > len)          return false;        numFramesCompletePos = sparser.pos;      }      while (j >> 6 != 1);      numFramesComplete++;    }    while (numFramesComplete < i);    return true;  }  public void loadScript(InputStream inputstream) {    ClearScript();    scriptStream = inputstream;    Thread thread = new Thread(this);    thread.setPriority(6);    thread.start();  }  public void run() {    try {      byte abyte0[] = new byte[512];      do {        int i = scriptStream.read(abyte0);        if (i < 0)break;        PushData(abyte0, i);      }      while (true);      scriptStream.close();    }    catch (IOException _ex) {}    scriptStream = null;    scriptComplete = true;  }}

⌨️ 快捷键说明

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