Форум программистов, компьютерный форум CyberForum.ru

Изменить переменную из класса MainActivity в классе MainRenderer - Android

Восстановить пароль Регистрация
 
cflood
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 37
20.08.2013, 08:42     Изменить переменную из класса MainActivity в классе MainRenderer #1
Ребята подскажите пожалуйста, у менять есть два файла:
MainActivity.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.app.Activity;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    //private boolean isTouch = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // Убираем тайтл приложения, тобишь делаем его FullScreen
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        // Создаём новый Surface и устанавливаем MainRenderer
        GLSurfaceView view = new GLSurfaceView(this);
        view.setRenderer(new MainRenderer());
        view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
        setContentView(view);
 
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int X = (int) event.getX();
        int Y = (int) event.getY();
        int upX = (int) event.getX();
        int upY = (int) event.getY();
        int downX = (int) event.getX();
        int downY = (int) event.getY();
        
        int eventaction = event.getAction();
 
        switch (eventaction) {
 
        case MotionEvent.ACTION_DOWN:
 
            Toast.makeText(this, "ВНИЗ "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
 
            !!! ТУТ ЗАДАЁМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ SIZE !!!
            
            break;
 
        case MotionEvent.ACTION_MOVE:
 
            Toast.makeText(this, "ДВИЖЕНИЕ "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
 
            break;
 
        case MotionEvent.ACTION_UP:
 
            Toast.makeText(this, "ВВЕРХ "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
 
            break;
 
        }
 
        return true;
 
    }
 
}
MainRenderer.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import java.nio.ByteOrder;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer;
 
 
public class MainRenderer implements Renderer {
    public int playerSize = 0;
    private Ship playerShip = new Ship();
    private Astedoid enemyAstedoid = new Astedoid();
    
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        gl.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); 
    }
 
    @Override
    public void onDrawFrame(GL10 gl) {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        playerShip.draw(gl);
        enemyAstedoid.draw(gl);
    }
 
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glOrthof(0, width, height, 0, 1, -1);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
    }
 
// --------------------------------------------------------------------------------
    
    class Ship {
        public int health = 100;
        public int life = 3;
 
        public FloatBuffer ShipVertexBuffer;
 
        public float ShipVerticles[] = {
            5, 5,       // лево низ
            5, 10,      // лево вверх
            10, 5,      // право низ
            10, 10      // право вверх
        };
        public Ship() {
            ByteBuffer bb = ByteBuffer.allocateDirect(36);
            bb.order(ByteOrder.nativeOrder());
            ShipVertexBuffer = bb.asFloatBuffer();
            ShipVertexBuffer.put(ShipVerticles);
            ShipVertexBuffer.position(0);
        }
        
        public void draw(GL10 gl) {
              gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
              gl.glVertexPointer(2, GL10.GL_FLOAT, 0, ShipVertexBuffer);
              gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
        }
 
    }
    
    class Astedoid {
        public int health = 100;
        public int life = 3;
 
        public FloatBuffer AsteroidColorBuffer;
        public FloatBuffer AsteroidVertexBuffer;
 
        public float AsteroidVerticles[] = {
                25, 25,     // лево низ
                25, 30,     // лево вверх
                30, 25,     // право низ
                30, 30      // право вверх
            };
        public Astedoid() {
            ByteBuffer bb = ByteBuffer.allocateDirect(36);
            bb.order(ByteOrder.nativeOrder());
            AsteroidVertexBuffer = bb.asFloatBuffer();
            AsteroidVertexBuffer.put(AsteroidVerticles);
            AsteroidVertexBuffer.position(0);
        }
        
        public void draw(GL10 gl) {
              gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
              gl.glVertexPointer(2, GL10.GL_FLOAT, 0, AsteroidVertexBuffer);
              gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
        }
 
    }
    
    
    
// --------------------------------------------------------------------------------
 
}
Цель задачи сделать чтобы из onTouchEvent на MotionEvent.ACTION_DOWN менялось значение некой переменной, например objectSize, после чего она передавалась в MainRenderer в class Ship и там менялось значение в:

Java
1
2
3
4
5
6
public float ShipVerticles[] = {
            5*objectSize, 5*objectSize,     // лево низ
            5*objectSize, 10*objectSize,        // лево вверх
            10*objectSize, 5*objectSize,        // право низ
            10*objectSize, 10*objectSize        // право вверх
        };
Подскажите пожалуйста как можно это реализовать? В итоге по касанию экрана меняется размер прямоугольника.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2013, 08:42     Изменить переменную из класса MainActivity в классе MainRenderer
Посмотрите здесь:

Android Notification - запуск MainActivity
Android Как изменить переменную в другом Activity?
Не создается MainActivity.java Android
Android Как заставить переменную не создаваться заново при создании экземпляра класса?
Защитить переменную класса от записи Android
Обращение к textView из другого класса (не MainActivity) в AndroidStudio Android
Доступ к полям MainActivity Android
Как переназначить переменную в классе Android
Android Изменить переменную в string.xml
Переделать MainActivity в Fragment Android
Android Как сделать доступ к MainActivity из класса android.app.Instrumentation?
MainActivity AsyncTask Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
name?
 Аватар для name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
20.08.2013, 11:23     Изменить переменную из класса MainActivity в классе MainRenderer #2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private MainRenderer renderer;
 
public class MainActivity extends Activity {
    //private boolean isTouch = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          ...
        renderer = new MainRenderer ();
        view.setRenderer(renderer);
}
 
 @Override
    public boolean onTouchEvent(MotionEvent event) {
 
        int eventaction = event.getAction();
 
        switch (eventaction) {
 
        case MotionEvent.ACTION_DOWN:
 
            Toast.makeText(this, "ВНИЗ "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
 
            renderer.setSize(40);
            
            break;
 }
B MainRenderer

Java
1
2
3
4
5
6
7
public class MainRenderer implements Renderer {
private int playerSize = 0;
...
public void setSize(int size){
playerSize*= size;
}
}
Yandex
Объявления
20.08.2013, 11:23     Изменить переменную из класса MainActivity в классе MainRenderer
Ответ Создать тему
Опции темы

Текущее время: 15:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru