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

onTouchEvent в потоке - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Hello World! http://www.cyberforum.ru/android-dev/thread449938.html
Привет! Такая вот штука…попытался запустить свой первый проект HelloWorld. Всё сделал точно по инструкции…сверялся с двумя букварями..Запуск не получается…Пишет что нужно исправить ошибки проекта…Я просто в тупике….сорри. Да…где можно посмотреть лог файл или код ошибки? Вот скриншот...
Android Ошибка в eclipse помогите пожалуйсто постоянно выскакивают ошибки btnCancel (btnOk;tvOut;main) cannot be resolved or is not a field public class MainActivity extends Activity implements OnClickListener { TextView tvOut; Button btnOk; Button btnCancel; /** Called when the activity is first created. */ @Override http://www.cyberforum.ru/android-dev/thread449228.html
Странная арифметика Java Android
Здравствуйте. Кто подскажет в чем дело, выполняю обычный пример (-3.4)+3, а ответ получаю совершенно необычный -0.4000001. С чем это может быть связано? Используемые типы данных float.
Eclipse не хочет компилировать приложение Android
Решил попытаться написать приложение под Андроид, eclipse не хочет компилировать подскажите плиз, что не так.
Android Генератор кубиков http://www.cyberforum.ru/android-dev/thread448185.html
Всем привет) Помогите новичку... Познания нулевые и вот решил попробовать сделать что-то похожее на игральные кости (кубики). Кодить пытаюсь в Eclipse (настроено все под Андроид, и виртуальные машины стоят) Ну это все преамбула... А теперь так сказать "амбула" ) Наваял такой вот код, он выводит на экран две простых кнопки на которых цифрами выводятся значения кубика. Далее хотел на обе...
Android ListView + Adapter Товарищи, помогите советом. Создал очень простую прогу: public class JustTestActivity extends Activity { String s = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; ListView lv; @Override подробнее

Показать сообщение отдельно
nnnikotinnn995
 Аватар для nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 292
28.02.2012, 16:12  [ТС]     onTouchEvent в потоке
Я вот тут попробовал из меча спрайт сделать, получилось очень "процедурно", идея в том, чтобы в зависимости от расстояния (if) запускать те или иные команды у соперника, а как это согласовать с классами - когда все координаты спрайтов приватные - не очень ясно. Вот основной класс
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
import java.util.ArrayList;
import java.util.List;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
 
 
 
 
public class GameView extends SurfaceView implements SensorEventListener{   
    /**Объект класса GameManager*/
    private GameManager gameLoopThread;
    /**Список спрайтов*/
    private List<mySprite> sprites = new ArrayList<mySprite>();
    /**Переменная запускающая поток рисования*/
    private boolean running = false;
    
private int BMP_ROWS = 2;
    
    /**Колонок в спрайте = 3*/
    private int BMP_COLUMNS = 6;
    
    private float ballSpeed = 0;
    private int currentFrame = 0;
    
    private int nnn = 0;
    
    private int width;
    private int height;
    
    
    
    Bitmap ball;
    
    private int bnSpeed;
    private int currentFrame2 = 0;
    
    private int width2;
    private int height2;
    
    Bitmap bn;
   
    //кнопки
    
    float x=0, y=55,n,b,n2=255,b2=55,btn=43,btn2=280,fn=255, fn2=95;
    Bitmap button;
    private int width3;
    private int height3;
    //фон
    
    
    private SensorManager mSensorManager;
    private Sensor mSensor;
    private float ySensorValue = 0, zSensorValue = 0;
    Bitmap fon;
    
    
    /** Начало gamemanager class*/
    public class GameManager extends Thread{
        private GameView view;   
        public GameManager(GameView view){
              this.view = view;
        }
        public void setRunning(boolean run){
              running = run;
        }
 
        public void run(){
            while (running){
                Canvas canvas = null;
                try{
                    // подготовка Canvas-а
                    canvas = view.getHolder().lockCanvas();
                    synchronized (view.getHolder()){
                        // собственно рисование
                        onDraw(canvas);
                    }
                }
                catch (Exception e) { }
                finally{
                    if (canvas != null){
                        view.getHolder().unlockCanvasAndPost(canvas);
                    }
                }
            }
        }
    }
    
    //-----------------------------------------Конец класса GameManager-------------------------------------
    
    
    int heightWindow, widthWindow;
    Context mContext;
    /**Конструктор класса*/
    public GameView(Context context, int w, int h) {
          super(context);
          gameLoopThread = new GameManager(this);
          this.heightWindow = h;
          this.widthWindow = w;
          this.mContext = context;
          
          mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
          mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
          mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME);
          
          
       //this.width = ball.getWidth() / BMP_COLUMNS;
         //  this.height = ball.getHeight() / BMP_ROWS;
          ball = BitmapFactory.decodeResource(getResources(), R.drawable.bn5);
          bn = BitmapFactory.decodeResource(getResources(), R.drawable.bn52);
          button = BitmapFactory.decodeResource(getResources(), R.drawable.button);
         fon = BitmapFactory.decodeResource(getResources(), R.drawable.fon);
          
          /*Рисуем все наши объекты и все все все*/
          getHolder().addCallback(new SurfaceHolder.Callback() {
                 /*** Уничтожение области рисования */
                 public void surfaceDestroyed(SurfaceHolder holder) {
                     boolean retry = true;
                     gameLoopThread.setRunning(false);
                    
                     while (retry){
                        try{
                            // ожидание завершение потока
                            gameLoopThread.join();
                            retry = false;
                        }
                        catch (InterruptedException e) { }
                     }
                 }
 
                 /** Создание области рисования */
                 public void surfaceCreated(SurfaceHolder holder) {
                        createSprites();
                        gameLoopThread.setRunning(true);
                        gameLoopThread.start();
                 }
 
                 /** Изменение области рисования */
                 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                 }
          });
    }
 
    /**Создание всех спрайтов*/
    private void createSprites(){
          sprites.add(createSprite(R.drawable.bad1));
          
    }
 
    /**Создаем спрайт на сцене*/
    private mySprite createSprite(int resouce) {
          Bitmap bmp = BitmapFactory.decodeResource(getResources(), resouce);
          return new mySprite(this, bmp);
    }
    
    
    // Измеряем fps
    int     m_count     = 0;
    long     m_fps         = 0;
    long     m_startTime = System.currentTimeMillis();  
    // заканчиваем
    
    /**Функция рисующая все спрайты и фон*/
    protected void onDraw(Canvas canvas){         
        //canvas.drawColor(Color.BLACK); // отрисовываем фон
        canvas.drawBitmap(fon, fn-fon.getWidth()/2, fn2-fon.getHeight()/2, null);
        seeFPS();
        
        //this.width = bmp.getWidth() / BMP_COLUMNS;
       // this.height = bmp.getHeight() / BMP_ROWS;
       // this.gameView = gameView;
       // this.bmp = bmp;
        //боец игрока
        
        
        
        
        canvas.drawBitmap(button, btn-button.getWidth()/2, btn2-button.getHeight()/2, null);
        
        width = ball.getWidth()/6;
        height = ball.getHeight();
        
        currentFrame = ++currentFrame % BMP_COLUMNS;
        moveBall();
         int srcX = currentFrame * width;
         int srcY = 0;
         
         Rect src = new Rect(srcX, srcY, srcX + width, srcY + height);//кусок снимка
         Rect dst = new Rect((int)x, (int)y, (int)x + width,(int) y + height);//нразмер его на экране
        
        canvas.drawBitmap(ball, src, dst, null);
         
        //боец комп
        
        width2 = bn.getWidth()/6;
        height2 = bn.getHeight();
        
        currentFrame2 = ++currentFrame2 % BMP_COLUMNS;
        
         int srcX2 = currentFrame * width2;
         int srcY2 =0;
         
         Rect src2 = new Rect(srcX2, srcY2, srcX2 + width2, srcY2 + height2);//кусок снимка
         Rect dst2 = new Rect((int)n2, (int)b2, (int)n2 + width2,(int) b2 + height2);//нразмер его на экране
        
        canvas.drawBitmap(bn, src2, dst2, null);
        
        
        Paint p = new Paint(createPaint(0));
        canvas.drawText("FPS: " + String.valueOf(m_fps), 10, p.getTextSize() + 5, p);
        
    }
    
    
    
     /**что то для измерения FPS*/
    public void seeFPS() {
    if (System.currentTimeMillis() - m_startTime > 1000){
            m_fps = (1000 * m_count)/ (System.currentTimeMillis() - m_startTime);
            m_startTime = System.currentTimeMillis();
            m_count = 0;
            Log.v("FPS", Integer.toString((int)m_fps));
        }
       ++m_count;
     }
 
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}
 
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        //float [] values = event.values;
        switch(event.sensor.getType()){
        case Sensor.TYPE_ORIENTATION:{
            ySensorValue = event.values[SensorManager.DATA_Y];
            zSensorValue = event.values[SensorManager.DATA_Z];
            break;
        }
        }
    }
    
    // перемещаем мяч, проверяя на пересечение с краями экрана
    private void moveBall(){
        x = x+ballSpeed;
          if (n2 + bnSpeed > 325) {
              bnSpeed = -5;
       }
       if (n2 + bnSpeed< 0) {
              bnSpeed = 5;
       }
       n2 = n2 + bnSpeed;
        
        
    }
 
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        switch(event.getAction()){
        case MotionEvent.ACTION_DOWN:
            //x = me.getX();
            //y = me.getY();
            //sprites.add(createSprite(R.drawable.bad1));
             n=event.getX();
             b=event.getY();
            if(b>265&&b<285&&n<80&&n>55){
                ballSpeed=8;
                bnSpeed=8;
            }
            if(b>265&&b<285&&n<55&&n>1){
                ballSpeed=-8;
                bnSpeed=-8;
            }
            break;
        case MotionEvent.ACTION_UP:
            //x = me.getX();
            //y = me.getY();
            ballSpeed=0;
            break;
        case MotionEvent.ACTION_MOVE:
            //x = me.getX();
            //y = me.getY();
            break;
        }
        return true;
    }
    
    private Paint createPaint(int sw){
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setSubpixelText(true);
        paint.setAntiAlias(true);
        paint.setColor(Color.GREEN);
        paint.setTextSize(10);
        return paint;
    }
}
Вложения
Тип файла: zip SurfaceView52.zip (2.95 Мб, 9 просмотров)
 
Текущее время: 11:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru