在cocos2dx中的同一场景中播放视频和游戏

时间:2013-10-11 12:59:26

标签: android video cocos2d-x

COCOS2dX大师,我刚开始用COCOS2dX进行游戏开发并且在某些时候陷入困境。

我正在通过学​​习cocos2dx开发工具包提供的样本来开发一个简单的游戏。每件事情都很好。

游戏要求:

  1. 游戏有单屏。
  2. 屏幕将分为几个部分。
  3. 40%的屏幕将用于播放视频片段。
  4. 60%的屏幕将用于玩游戏。
  5. 我所做的是:

    1. 游戏正在运行并使用整个屏幕。
    2. 能够播放视频,它也使用整个屏幕。
    3. 我必须实现的目标:

      1. 视频应在40%的屏幕中连续播放
      2. 剩余部分应该用于玩游戏。
      3. 简而言之,我需要在单个“CCScene”中执行这两项功能

        提前感谢您提供最佳解决方案。

2 个答案:

答案 0 :(得分:3)

这可以通过稍微更改libcocos2dx中的Cocos2dxActivity类来实现,以在那里添加VideoView。

首先,将此xml布局添加到libcocos2dx中的res / layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <VideoView
        android:id="@+id/video"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="4" />

    <FrameLayout
        android:id="@+id/frame"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="6" >

    </FrameLayout>

</LinearLayout>

此布局将是您应用的新布局。

其次,您必须将Cocos2dxActivity中的init()方法更改为:

public void init() {

    // Set our new layout as the content view
    setContentView(R.layout.test);

    // FrameLayout
    //ViewGroup.LayoutParams framelayout_params =
    //new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
    //ViewGroup.LayoutParams.FILL_PARENT);
    //FrameLayout framelayout = new FrameLayout(this);
    //framelayout.setLayoutParams(framelayout_params);

    Resources res = this.getResources();
    int id = res.getIdentifier("YOUR_VIDEO_NAME_HERE", "raw", getPackageName());

    if (id == 0) {
        Log.e("Cocos2dx VIDEO", "ERROR! Resource id == 0");
        Log.e("Cocos2dx VIDEO", "ERROR! Check name of video!");
    } else {

        VideoView vv = (VideoView) findViewById(R.id.video);
        MediaController mc = new MediaController(this);
        mc.setAnchorView(vv);
        vv.setMediaController(mc);
        vv.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + id));
        vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                if (mp != null)
                    mp.setLooping(true);
            });

        vv.requestFocus();
        vv.start();
    }

    FrameLayout framelayout = (FrameLayout) findViewById(R.id.frame);

    // Cocos2dxEditText layout
    ViewGroup.LayoutParams edittext_layout_params =
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                                   ViewGroup.LayoutParams.WRAP_CONTENT);
    Cocos2dxEditText edittext = new Cocos2dxEditText(this);
    edittext.setLayoutParams(edittext_layout_params);

    // ...add to FrameLayout
    framelayout.addView(edittext);

    // Cocos2dxGLSurfaceView
    this.mGLSurfaceView = this.onCreateView();

    // ...add to FrameLayout
    framelayout.addView(this.mGLSurfaceView);

    // Switch to supported OpenGL (ARGB888) mode on emulator
    if (isAndroidEmulator())
       this.mGLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);

    this.mGLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());
    this.mGLSurfaceView.setCocos2dxEditText(edittext);

    //// Set framelayout as the content view
    //setContentView(framelayout);
}

这将为您提供屏幕左侧40%的VideView和右侧60%的cocos游戏区域。

您应将视频放在项目的res / raw文件夹中。

此外,这是Android专用解决方案(基于您在问题中提供的标记)。要在iOS或其他平台上实现此目的,您必须对这些平台的cocos库代码进行其他更改。

编辑:记住清理(只是为了安全)并重建库。

答案 1 :(得分:0)

您可以在CCScene中安装两个CCLayer,一个层将播放视频,另一个层将播放游戏!